【NumPy】官方文档详解(二)NumPy快速入门:形状处理

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]])]

猜你喜欢

转载自blog.csdn.net/codelady_g/article/details/122109308
今日推荐