目录
前言
数组属性
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
维。这里的 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