1. 创建数组时指定形状
NumPy数组可以指定每个轴的元素数从而设定形状,在创建数组时,通常用一个元组作为参数来完成,元组的长度即数组的轴数/维度,元组中的数就代表数组某个轴的元素数。
[ 例1 ] 生成全零二维数组,指定形状为2*4:a = np.zeros((2,4),dtype=int)
[ 例2 ] 生成3*4的二维数组,内容是0~9的随机整数:a = np.floor(10*np.random.random((3,4)))
np.random生成0~1的随机小数,乘10之后再用np.floor向下取整,即得到小于10的随机整数。结果如下:
[[1. 4. 3. 9.]
[1. 4. 6. 0.]
[6. 0. 7. 4.]]
2. 更改数组的形状
数组的形状可以使用各种命令进行更改。以下三种操作返回已修改的数组,但不更改原始数组:
- a.ravel():将数组摊平,即返回一个一维的长数组
- a.reshape():返回具有指定形状的数组
- a.T :转置
a = np.array([[1,2,3,4],[5,6,7,8]])
print(a.ravel())
print(a.reshape((4,2)))
print(a.T.shape)
print(a)
[1 2 3 4 5 6 7 8] # a.ravel()
[[1 2]
[3 4]
[5 6]
[7 8]] # a.reshape()
(4, 2) # a.T.shape
[[1 2 3 4]
[5 6 7 8]] # a仍为原始形状
如果想要改变原始数组,可以将改变后的形状重新赋给a,或者使用np.resize
a = np.array([[1,2,3,4],[5,6,7,8]])
b = np.array([[1,2,3,4],[5,6,7,8]])
a = a.reshape((4,2)) # 进行reshape之后重新赋值
b.resize((1,8)) # 直接使用resize
(4, 2)
(1, 8)
3. 数组堆叠
多个数组可以按不同的轴堆叠在一起,竖着堆用vstack(v指vertical,竖直的),横着堆用hstack(h指horizontal,水平的),要注意参数是元组!以两个2×2数组为例:
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.vstack((a,b)))
print(np.hstack((a,b)))
print(np.hstack((a,b,a,b)))
[[1 2]
[3 4]
[5 6]
[7 8]] # np.vstack((a,b))
[[1 2 5 6]
[3 4 7 8]] # np.hstack((a,b))
[[1 2 5 6 1 2 5 6]
[3 4 7 8 3 4 7 8]] # np.hstack((a,b,a,b))
通常,对于具有两个以上维度的数组,hstack沿其第二个轴,vstack沿其第一个轴。除此以外 column_stack, c_, r_ 等也能够实现堆叠,在此先按下不表。
4. 数组拆分
和堆叠类似,拆分使用的是vsplit和hsplit,两种主要的使用方式是:
- 沿着其水平/垂直轴拆分数组,指定要返回的等形数组的数量
- 以元组形式指定应在其之后进行切分的列
a = np.arange(20).reshape(2,10)
print(np.hsplit(a,2)) # 返回几个等形数组
print(np.hsplit(a,(2,7))) # 指定拆分点
[array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]]),
array([[ 5, 6, 7, 8, 9],
[15, 16, 17, 18, 19]])]
[array([[ 0, 1],
[10, 11]]),
array([[ 2, 3, 4, 5, 6],
[12, 13, 14, 15, 16]]),
array([[ 7, 8, 9],
[17, 18, 19]])]