本文主要是介绍numpy数组shape相关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
numpy数组shape相关操作
- 数组变形
- 通过numpy.ndarray.shape查看、修改数组形状
- 通过numpy.ndarray.flat获取数组的一维迭代器
- 通过numpy.ndarray.flatten([order='C']) 将获取数组一维数组的副本(返回的是拷贝)
- 通过numpy.ravel(a, order='C') 将获取数组一维数组(order='C'返回的是视图,order='F'返回的是拷贝)
- numpy.reshape(a, newshape[, order='C']) 改变数组形状(视图)
- 数组转置
- numpy.transpose(a, axes=None)
- numpy.ndarray.T Same as self.transpose(), except that self is returned if self.ndim < 2.
- 增减维度
- 通过numpy.newaxis增加维度
- 通过numpy.squeeze(a, axis=None)删除维度
- 数组拼接
- numpy.concatenate((a1, a2, ...), axis=0, out=None) 按现有维度拼接
- numpy.stack(arrays, axis=0, out=None) 增加新的维度进行拼接
- vstack(tup)、hstack(tup)
- 数组拆分
- numpy.split(ary, indices_or_sections, axis=0)
- vsplit(ary, indices_or_sections)、hsplit(ary, indices_or_sections)
- 数组复制
- numpy.tile(A, reps)
- numpy.repeat(a, repeats, axis=None)
数组变形
通过numpy.ndarray.shape查看、修改数组形状
查看:
x = np.array([1, 2, 9, 4, 5, 6, 7, 8])print(x.shape) # (8,)
修改:
x.shape = [2, 4]
print(x)
# [[1 2 9 4]
# [5 6 7 8]]
通过numpy.ndarray.flat获取数组的一维迭代器
通过numpy.ndarray.flat获取数组的以为迭代器后即可完成通过for等操作遍历数组或修改数组等
for循环遍历数组:
x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])
y = x.flat
print(y)
# <numpy.flatiter object at 0x0000020F9BA10C60>
for i in y:print(i, end=' ')
# 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
通过迭代器修改数组:
y[3] = 0
print(end='\n')
print(x)
# [[11 12 13 0 15]
# [16 17 18 19 20]
# [21 22 23 24 25]
# [26 27 28 29 30]
# [31 32 33 34 35]]
通过numpy.ndarray.flatten([order=‘C’]) 将获取数组一维数组的副本(返回的是拷贝)
order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序
x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])
y = x.flatten()
print(y)
# [11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
# 35]y[3] = 0
print(x)
# [[11 12 13 14 15]
# [16 17 18 19 20]
# [21 22 23 24 25]
# [26 27 28 29 30]
# [31 32 33 34 35]]x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])y = x.flatten(order='F')
print(y)
# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30
# 35]y[3] = 0
print(x)
# [[11 12 13 14 15]
# [16 17 18 19 20]
# [21 22 23 24 25]
# [26 27 28 29 30]
# [31 32 33 34 35]]
通过numpy.ravel(a, order=‘C’) 将获取数组一维数组(order='C’返回的是视图,order='F’返回的是拷贝)
order=‘C’
x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])
y = np.ravel(x)
print(y)
# [11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
# 35]y[3] = 0
print(x)
# [[11 12 13 0 15]
# [16 17 18 19 20]
# [21 22 23 24 25]
# [26 27 28 29 30]
# [31 32 33 34 35]]
order=‘F’
x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])y = np.ravel(x, order='F')
print(y)
# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30
# 35]y[3] = 0
print(x)
# [[11 12 13 14 15]
# [16 17 18 19 20]
# [21 22 23 24 25]
# [26 27 28 29 30]
# [31 32 33 34 35]]
numpy.reshape(a, newshape[, order=‘C’]) 改变数组形状(视图)
reshape()函数当参数newshape = [rows,-1]时,将根据行数自动确定列数
x = np.arange(12)
y = np.reshape(x, [3, 4])
print(y.dtype) # int32
print(y)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]y = np.reshape(x, [3, -1])
print(y)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]y = np.reshape(x,[-1,3])
print(y)
# [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
当参数newshape = -1时,表示将数组降为一维
x = np.random.randint(12, size=[2, 2, 3])
print(x)
# [[[11 9 1]
# [ 1 10 3]]
#
# [[ 0 6 1]
# [ 4 11 3]]]
y = np.reshape(x, -1)
print(y)
# [11 9 1 1 10 3 0 6 1 4 11 3]
数组转置
numpy.transpose(a, axes=None)
x = np.random.rand(5, 5) * 10
x = np.around(x, 2)
print(x)
# [[6.74 8.46 6.74 5.45 1.25]
# [3.54 3.49 8.62 1.94 9.92]
# [5.03 7.22 1.6 8.7 0.43]
# [7.5 7.31 5.69 9.67 7.65]
# [1.8 9.52 2.78 5.87 4.14]]
y = x.T
print(y)
# [[6.74 3.54 5.03 7.5 1.8 ]
# [8.46 3.49 7.22 7.31 9.52]
# [6.74 8.62 1.6 5.69 2.78]
# [5.45 1.94 8.7 9.67 5.87]
# [1.25 9.92 0.43 7.65 4.14]]
numpy.ndarray.T Same as self.transpose(), except that self is returned if self.ndim < 2.
y = np.transpose(x)
print(y)
# [[6.74 3.54 5.03 7.5 1.8 ]
# [8.46 3.49 7.22 7.31 9.52]
# [6.74 8.62 1.6 5.69 2.78]
# [5.45 1.94 8.7 9.67 5.87]
# [1.25 9.92 0.43 7.65 4.14]]
增减维度
通过numpy.newaxis增加维度
x = np.array([1, 2, 9, 4, 5, 6, 7, 8])
print(x.shape) # (8,)
print(x) # [1 2 9 4 5 6 7 8]y = x[np.newaxis, :]
print(y.shape) # (1, 8)
print(y) # [[1 2 9 4 5 6 7 8]]y = x[:, np.newaxis]
print(y.shape) # (8, 1)
print(y)
# [[1]
# [2]
# [9]
# [4]
# [5]
# [6]
# [7]
# [8]]
通过numpy.squeeze(a, axis=None)删除维度
numpy.squeeze(a, axis=None) 从数组的形状中删除单维度条目,即把shape中为1的维度去掉。
a表示输入的数组;
axis用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;
x = np.array([[[0], [1], [2]]])
print(x.shape) # (1, 3, 1)
print(x)
# [[[0]
# [1]
# [2]]]y = np.squeeze(x)
print(y.shape) # (3,)
print(y) # [0 1 2]y = np.squeeze(x, axis=0)
print(y.shape) # (3, 1)
print(y)
# [[0]
# [1]
# [2]]y = np.squeeze(x, axis=2)
print(y.shape) # (1, 3)
print(y) # [[0 1 2]]y = np.squeeze(x, axis=1)
# ValueError: cannot select an axis to squeeze out which has size not equal to one
数组拼接
numpy.concatenate((a1, a2, …), axis=0, out=None) 按现有维度拼接
x,y在原来的维度上进行拼接:
x = np.array([1, 2, 3])
y = np.array([7, 8, 9])
z = np.concatenate([x, y])
print(z)
# [1 2 3 7 8 9]z = np.concatenate([x, y], axis=0)
print(z)
# [1 2 3 7 8 9]x = np.array([1, 2, 3]).reshape(1, 3)
y = np.array([7, 8, 9]).reshape(1, 3)
z = np.concatenate([x, y])
print(z)
# [[ 1 2 3]
# [ 7 8 9]]
z = np.concatenate([x, y], axis=0)
print(z)
# [[ 1 2 3]
# [ 7 8 9]]
z = np.concatenate([x, y], axis=1)
print(z)
# [[ 1 2 3 7 8 9]]
numpy.stack(arrays, axis=0, out=None) 增加新的维度进行拼接
x = np.array([1, 2, 3]).reshape(1, 3)
y = np.array([7, 8, 9]).reshape(1, 3)
z = np.stack([x, y])
print(z.shape) # (2, 1, 3)
print(z)
# [[[1 2 3]]
#
# [[7 8 9]]]z = np.stack([x, y], axis=1)
print(z.shape) # (1, 2, 3)
print(z)
# [[[1 2 3]
# [7 8 9]]]z = np.stack([x, y], axis=2)
print(z.shape) # (1, 3, 2)
print(z)
# [[[1 7]
# [2 8]
# [3 9]]]
vstack(tup)、hstack(tup)
numpy.vstack(tup) -> numpy.stack(arrays, axis=0)
numpy.hstack(tup) -> numpy.stack(arrays, axis=1)
x = np.array([1, 2, 3]).reshape(1, 3)
y = np.array([7, 8, 9]).reshape(1, 3)
z = np.vstack((x, y))
print(z.shape) # (2, 3)
print(z)
# [[1 2 3]
# [7 8 9]]z = np.concatenate((x, y), axis=0)
print(z.shape) # (2, 3)
print(z)
# [[1 2 3]
# [7 8 9]]z = np.hstack((x, y))
print(z.shape) # (1, 6)
print(z)
# [[ 1 2 3 7 8 9]]z = np.concatenate((x, y), axis=1)
print(z.shape) # (1, 6)
print(z)
# [[1 2 3 7 8 9]]
数组拆分
numpy.split(ary, indices_or_sections, axis=0)
numpy.split(ary, indices_or_sections, axis=0) Split an array into multiple sub-arrays as views into ary.
x = np.array([[11, 12, 13, 14],[16, 17, 18, 19],[21, 22, 23, 24]])
y = np.split(x, [1, 3])
print(y)
# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],
# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]y = np.split(x, [1, 3], axis=1)
print(y)
# [array([[11],
# [16],
# [21]]), array([[12, 13],
# [17, 18],
# [22, 23]]), array([[14],
# [19],
# [24]])]
vsplit(ary, indices_or_sections)、hsplit(ary, indices_or_sections)
vsplit(ary, indices_or_sections) -> numpy.split(ary, indices_or_sections, axis=0)
hsplit(ary, indices_or_sections) -> numpy.split(ary, indices_or_sections, axis=1)
x = np.array([[11, 12, 13, 14],[16, 17, 18, 19],[21, 22, 23, 24]])
y = np.vsplit(x, 3)
print(y)
# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19]]), array([[21, 22, 23, 24]])]y = np.split(x, 3)
print(y)
# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19]]), array([[21, 22, 23, 24]])]x = np.array([[11, 12, 13, 14],[16, 17, 18, 19],[21, 22, 23, 24]])
y = np.hsplit(x, 2)
print(y)
# [array([[11, 12],
# [16, 17],
# [21, 22]]), array([[13, 14],
# [18, 19],
# [23, 24]])]y = np.split(x, 2, axis=1)
print(y)
# [array([[11, 12],
# [16, 17],
# [21, 22]]), array([[13, 14],
# [18, 19],
# [23, 24]])]
数组复制
numpy.tile(A, reps)
Construct an array by repeating A the number of times given by reps.
根据reps矩阵来对指定维度复制的次数
x = np.array([[1, 2], [3, 4]])
print(x)
# [[1 2]
# [3 4]]y = np.tile(x, (1, 3))
print(y)
# [[1 2 1 2 1 2]
# [3 4 3 4 3 4]]y = np.tile(x, (3, 1))
print(y)
# [[1 2]
# [3 4]
# [1 2]
# [3 4]
# [1 2]
# [3 4]]y = np.tile(x, (3, 3))
print(y)
# [[1 2 1 2 1 2]
# [3 4 3 4 3 4]
# [1 2 1 2 1 2]
# [3 4 3 4 3 4]
# [1 2 1 2 1 2]
# [3 4 3 4 3 4]]
numpy.repeat(a, repeats, axis=None)
numpy.repeat(a, repeats, axis=None) Repeat elements of an array.
- axis=0,沿着y轴复制,实际上增加了行数。
- axis=1,沿着x轴复制,实际上增加了列数。
- repeats,可以为一个数,也可以为一个矩阵。
- axis=None时就会flatten当前矩阵,实际上就是变成了一个行向量
x = np.repeat(3, 4)
print(x) # [3 3 3 3]x = np.array([[1, 2], [3, 4]])
y = np.repeat(x, 2)
print(y)
# [1 1 2 2 3 3 4 4]y = np.repeat(x, 2, axis=0)
print(y)
# [[1 2]
# [1 2]
# [3 4]
# [3 4]]y = np.repeat(x, 2, axis=1)
print(y)
# [[1 1 2 2]
# [3 3 4 4]]y = np.repeat(x, [2, 3], axis=0)
print(y)
# [[1 2]
# [1 2]
# [3 4]
# [3 4]
# [3 4]]y = np.repeat(x, [2, 3], axis=1)
print(y)
# [[1 1 2 2 2]
# [3 3 4 4 4]]
这篇关于numpy数组shape相关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!