机器学习常用包numpy篇(二)数组属性与基本操作

目录

前言

数组属性

1.数组转置

2.数组元素的数据类型

3.数组元素的虚部

4.数组元素的实部

5.数组包含的元素个数

6.数组元素的字节数

7.数组元素的总字节

8.数组维度

9.数组形状

10.每个维度中步进的字节数组

11.数组维度和形状

数组基本操作

1.重设形状

2.数组展开变成1维

3.轴移动(类似 仿射变换)

4.轴交换

5.数组转置

6.维度改变

7.类型转换

8.数组连接

9.数组堆叠

10.拆分

11.删除

12.数组插入

13.附加

14.重设尺寸

15.翻转数组


前言

上一篇:机器学习入门常用包-numpy篇(一)数组生成-CSDN博客

以二维数组为例子,进行数组属性和操作讲解。

先创建一个二维数组a

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a)  # 查看 a 的值

运行示例

数组属性

1.数组转置

ndarray.T 用于数组的转置,与 .transpose() 相同

print(a.T)
print(a.transpose())

运行示例

2.数组元素的数据类型

ndarray.dtype 用来输出数组包含元素的数据类型

print(a.dtype)

运行示例

3.数组元素的虚部

ndarray.imag 用来输出数组包含元素的虚部

print(a.imag)

运行示例

4.数组元素的实部

ndarray.real用来输出数组包含元素的实部

print(a.real)

运行示例

5.数组包含的元素个数

ndarray.size用来输出数组中的总包含元素数

print(a.size)

运行示例

6.数组元素的字节数

ndarray.itemsize输出一个数组元素的字节数(单个元素的字节是多少)

print(a.itemsize)

运行示例

7.数组元素的总字节

ndarray.nbytes用来输出数组的元素总字节数

print(a.nbytes)

运行示例

8.数组维度

ndarray.ndim用来输出数组维度

print(a.ndim)

运行示例

9.数组形状

ndarray.shape用来输出数组形状

print(a.shape)

运行示例

10.每个维度中步进的字节数组

ndarray.strides用来遍历数组时,输出每个维度中步进的字节数组

解释:a数组(行和列)每邻行之间相差3*8,每邻列之间相差1*8

print(a.strides)

运行示例

11.数组维度和形状

.shape 得到的形状实际上是数组在每个轴 Axis 上面的元素数量,而 .shape 的长度的表明了数组的维度。

运行示例

one = np.array([7, 2, 9, 10])
two = np.array([[5.2, 3.0, 4.5],
                [9.1, 0.1, 0.3]])
three = np.array([[[1, 1], [1, 1], [1, 1]],
                  [[1, 1], [1, 1], [1, 1]],
                  [[1, 1], [1, 1], [1, 1]],
                  [[1, 1], [1, 1], [1, 1]]])
print(one.shape, two.shape, three.shape)        

数组基本操作

1.重设形状

reshape 可以在不改变数组数据的同时,改变数组的形状。其中,numpy.reshape() 等效于 ndarray.reshape()reshape 方法非常简单:

numpy.reshape(a, newshape)

其中,a 表示原数组,newshape 用于指定新的形状(整数或者元组)

b=np.arange(10).reshape((5, 2))

运行示例

2.数组展开变成1维

ravel 的目的是将任意形状的数组扁平化,变为 1 维数组。ravel 方法如下:

numpy.ravel(a, order='C')

其中,a 表示需要处理的数组。order 表示变换时的读取顺序,默认是按照行依次读取,当 order='F' 时,可以按列依次读取排序

a = np.arange(10).reshape((2, 5))
print(a)
c=np.ravel(a)
d=np.ravel(a, order='F')
print(c,d)

3.轴移动(类似 仿射变换)

moveaxis 可以将数组的轴移动到新的位置。其方法如下:

numpy.moveaxis(a, source, destination)

参数说明:

  • a:数组。
  • source:要移动的轴的原始位置。
  • destination:要移动的轴的目标位置。
a = np.ones((1, 2, 3))
np.moveaxis(a, 0, -1)

你可能没有看明白是什么意思,我们可以输出二者的 shape 属性:

print(a.shape, np.moveaxis(a, 0, -1).shape)

运行示例

4.轴交换

和 moveaxis 不同的是,swapaxes 可以用来交换数组的轴。其方法如下:

numpy.swapaxes(a, axis1, axis2)

参数说明:

  • a:数组。
  • axis1:需要交换的轴 1 位置。
  • axis2:需要与轴 1 交换位置的轴 1 位置。
a = np.ones((1, 4, 3))
f = np.swapaxes(a, 0, 2)
print(a)
print(f)

运行示例

5.数组转置

transpose 类似于矩阵的转置,它可以将 2 维数组的横轴和纵轴交换。其方法如下:

numpy.transpose(a, axes=None)

参数说明:

  • a:数组。
  • axis:该值默认为 none,表示转置。如果有值,那么则按照值替换轴。
a = np.arange(4).reshape(2, 2)
g = np.transpose(a)
print(a)
print(g)

运行示例

6.维度改变

atleast_xd 支持将输入数据直接视为 维。这里的 x 可以表示:1,2,3。方法分别为:

numpy.atleast_1d()
numpy.atleast_2d()
numpy.atleast_3d()

print(np.atleast_1d([1, 2, 3]))
print(np.atleast_2d([4, 5, 6]))
print(np.atleast_3d([7, 8, 9]))

运行示例

7.类型转换

在 NumPy 中,还有一系列以 as 开头的方法,它们可以将特定输入转换为数组,亦可将数组转换为矩阵、标量,ndarray 等。如下:

  • asarray(a,dtype,order):将特定输入转换为数组。
  • asanyarray(a,dtype,order):将特定输入转换为 ndarray
  • asmatrix(data,dtype):将特定输入转换为矩阵。
  • asfarray(a,dtype):将特定输入转换为 float 类型的数组。
  • asarray_chkfinite(a,dtype,order):将特定输入转换为数组,检查 NaN 或 infs
  • asscalar(a):将大小为 1 的数组转换为标量。

这里以 asmatrix(data,dtype) 方法举例:

a = np.arange(4).reshape(2, 2)
h = np.asmatrix(a)  # 将二维数组转化为矩阵类型
print(a)
print(h)

运行示例

8.数组连接

concatenate 可以将多个数组沿指定轴连接在一起。其方法为:

numpy.concatenate((a1, a2, ...), axis=0)

参数说明:

  • (a1, a2, ...):需要连接的数组。
  • axis:指定连接轴。
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8], [9, 10]])
c = np.array([[11, 12]])

np.concatenate((a, b, c), axis=0)

运行示例

这里,我们可以尝试沿着横轴连接。但要保证连接处的维数一致,所以这里用到了 .T 转置。

a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([[7, 8, 9]])

np.concatenate((a, b.T), axis=1)

运行示例

9.数组堆叠

在 NumPy 中,以下方法可用于数组的堆叠:

  • stack(arrays,axis):沿着新轴连接数组的序列。
  • column_stack():将 1 维数组作为列堆叠到 2 维数组中。
  • hstack():按水平方向堆叠数组。
  • vstack():按垂直方向堆叠数组。
  • dstack():按深度方向堆叠数组。

这里以 stack(arrays,axis) 方法举例:

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.stack((a, b))
print(c)

运行示例

当然,也可以横着堆叠。

d = np.stack((a, b), axis=-1)
print(d)

运行示例

10.拆分

split 及与之相似的一系列方法主要是用于数组的拆分,列举如下:

  • split(ary,indices_or_sections,axis):将数组拆分为多个子数组。
  • dsplit(ary,indices_or_sections):按深度方向将数组拆分成多个子数组。
  • hsplit(ary,indices_or_sections):按水平方向将数组拆分成多个子数组。
  • vsplit(ary,indices_or_sections):按垂直方向将数组拆分成多个子数组。

下面,我们看一看 split 到底有什么效果:

a = np.arange(10)
np.split(a, 5)

运行示例

除了 1 维数组,更高维度也是可以直接拆分的。例如,我们可以将下面的数组按行拆分为 2。

a = np.arange(10).reshape(2, 5)
np.split(a, 2)

运行示例

NumPy 中还有针对数组元素添加或移除的一些方法。

11.删除

首先是 delete 删除:

  • delete(arr,obj,axis):沿特定轴删除数组中的子数组。
a = np.arange(12).reshape(3, 4)
b = np.delete(a, 2, 1)
print(a)
print(b)

运行示例

这里代表沿着横轴,将第 3 列(索引 2)删除。当然,你也可以沿着纵轴,将第三行删除。

np.delete(a, 2, 0)

运行示例

12.数组插入

再看一看 insert 插入,用法和 delete 很相似,只是需要在第三个参数位置设置需要插入的数组对象:

  • insert(arr,obj,values,axis):依据索引在特定轴之前插入值。
a = np.arange(12).reshape(3, 4)
b = np.arange(4)

c = np.insert(a, 2, b, 0)
print(a)
print(b)
print(c)

运行示例

13.附加

append 的用法也非常简单。只需要设置好需要附加的值和轴位置就好了。它其实相当于只能在末尾插入的 insert,所以少了一个指定索引的参数。

  • append(arr,values,axis):将值附加到数组的末尾,并返回 1 维数组。
a = np.arange(6).reshape(2, 3)
b = np.arange(3)

np.append(a, b)

注意 append 方法返回值,默认是展平状态下的 1 维数组。

运行示例

14.重设尺寸

resize 很好理解,直接举例子:

  • resize(a,new_shape):对数组尺寸进行重新设定。
a = np.arange(10)
print(a)
a.resize(2, 5)
print(a)

你可能会纳闷了,这个 resize 看起来和上面的 reshape 一样呢,都是改变数组原有的形状。

其实,它们是有区别的,区别在于对原数组的影响。reshape 在改变形状时,不会影响原数组,相当于对原数组做了一份拷贝。而 resize 则是对原数组执行操作。

运行示例

15.翻转数组

在 NumPy 中,我们还可以对数组进行翻转操作:

  • fliplr(m):左右翻转数组。
  • flipud(m):上下翻转数组。
a = np.arange(16).reshape(4, 4)
print(a)
print(np.fliplr(a))
print(np.flipud(a))

运行示例

以上为笔者的学习笔记,如有不妥,希望各位批评指正0v0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值