Numpy 数组操作
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:
1、修改数组形状
函数 描述
reshape 不改变数据的条件下修改形状
flat 数组元素迭代器
flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
ravel 返回展开数组
(1)numpy.reshape
numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下:
numpy.reshape(arr, newshape, order='C')
arr:要修改形状的数组 newshape:整数或者整数数组,新的形状应当兼容原有形状 order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。
import numpy as np
arr=np.arange(8)
print(arr)
print('\n')
arr1=arr.reshape(2,4)
print(arr1)
[0 1 2 3 4 5 6 7]
[[0 1 2 3]
[4 5 6 7]]
(2)numpy.ndarray.flat
numpy.ndarray.flat 是一个数组元素迭代器,实例如下:
import numpy as np
arr=np.arange(8).reshape(2,4)
for i in arr.flat:
print(i,end=' ')
0 1 2 3 4 5 6 7
(3)numpy.ndarray.flatten
numpy.ndarray.flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,格式如下:
import numpy as np
arr=np.arange(8).reshape(2,4)
print(arr)
print('\n')
print(arr.flatten())
print('\n')
print(arr.flatten(order='F'))#F风格,列优先
[[0 1 2 3]
[4 5 6 7]]
[0 1 2 3 4 5 6 7]
[0 4 1 5 2 6 3 7]
(4)numpy.ravel
numpy.ravel() 展平的数组元素,顺序通常是"C风格",返回的是数组视图(view,有点类似 C/C++引用reference的意味),修改会影响原始数组。 该函数接收两个参数:
numpy.ravel(a, order='C')
import numpy as np
arr=np.arange(8).reshape(2,4)
print(arr)
print('\n')
print(arr.ravel())
print('\n')
print(arr.ravel(order='F'))#F风格,列优先
[[0 1 2 3]
[4 5 6 7]]
[0 1 2 3 4 5 6 7]
[0 4 1 5 2 6 3 7]
2、翻转数组
函数 描述
transpose 对换数组的维度
ndarray.T 和 self.transpose() 相同
rollaxis 向后滚动指定的轴
swapaxes 对换数组的两个轴
(1)numpy.transpose
numpy.transpose 函数用于对换数组的维度,格式如下:
import numpy as np
arr=np.arange(8).reshape(2,4)
print(arr)
print('\n')
print(np.transpose(arr))
[[0 1 2 3]
[4 5 6 7]]
[[0 4]
[1 5]
[2 6]
[3 7]]
(2)numpy.ndarray.T
类似于numpy.transpose,用于数组转置
(3)numpy.rollaxis
numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下:
numpy.rollaxis(arr, axis, start)
arr:数组
axis:要向后滚动的轴,其它轴的相对位置不会改变
start:默认为零,表示完整的滚动。会滚动到特定位置。
import numpy as np
# 创建了三维的 ndarray
a = np.arange(8).reshape(2,2,2)
print ('原数组:')
print (a)
print ('获取数组中一个值:')
print(np.where(a==6))
print(a[1,1,0]) # 为 6
print ('\n')
# 将轴 2 滚动到轴 0(宽度到深度)
print ('调用 rollaxis 函数:')
b = np.rollaxis(a,2,0)
print (b)
# 查看元素 a[1,1,0],即 6 的坐标,变成 [0, 1, 1]
# 最后一个 0 移动到最前面
print(np.where(b==6))
print ('\n')
# 将轴 2 滚动到轴 1:(宽度到高度)
print ('调用 rollaxis 函数:')
c = np.rollaxis(a,2,1)
print (c)
# 查看元素 a[1,1,0],即 6 的坐标,变成 [1, 0, 1]
# 最后的 0 和 它前面的 1 对换位置
print(np.where(c==6))
print ('\n')
原数组:
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
获取数组中一个值:
(array([1]), array([1]), array([0]))
6
调用 rollaxis 函数:
[[[0 2]
[4 6]]
[[1 3]
[5 7]]]
(array([0]), array([1]), array([1]))
调用 rollaxis 函数:
[[[0 2]
[1 3]]
[[4 6]
[5 7]]]
(array([1]), array([0]), array([1]))
(4)numpy.swapaxes
numpy.swapaxes 函数用于交换数组的两个轴,格式如下:
numpy.swapaxes(arr, axis1, axis2)
arr:输入的数组
axis1:对应第一个轴的整数
axis2:对应第二个轴的整数
import numpy as np
# 创建了三维的 ndarray
a = np.arange(8).reshape(2,2,2)
print ('原数组:')
print (a)
print ('\n')
# 现在交换轴 0(深度方向)到轴 2(宽度方向)
print ('调用 swapaxes 函数后的数组:')
print (np.swapaxes(a, 2, 0))
原数组:
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
调用 swapaxes 函数后的数组:
[[[0 4]
[2 6]]
[[1 5]
[3 7]]]
3、修改数组维度
维度 描述
broadcast 产生模仿广播的对象
broadcast_to 将数组广播到新形状
expand_dims 扩展数组的形状
squeeze 从数组的形状中删除一维条目