机器学习基础 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

Numpy数组的形状处理

改变数组的形状

可以通过多个函数改变数组的形状

import numpy as np
a = np.ones((3,4))
print(a.ravel())    #将数组转化为一维数组
'''
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
'''
a.shape=(6,2)
print(a)
'''
array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.]])
'''
a.resize((6,2))    #等同于a.shape=(6,2)

其实,形状指定可以少一个值,因此可以把不指定的那个值设置为-1,例如:

a.resize((6,-1))    #由于数组a的元素个数为12,行为6,则列为2,等同于a.resize((6,2))

合并数组

合并数组有多种方法,例如:

import numpy as np
a=np.zeros((2,2))
b=np.ones((2,2))
print(np.vstack((a,b)))    #垂直方向合并
'''
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 1.,  1.],
       [ 1.,  1.]])
'''
print(np.hstack((a,b)))    #水平方向合并
'''
array([[ 0.,  0.,  1.,  1.],
       [ 0.,  0.,  1.,  1.]])
'''

拆分数组

使用hsplit和vsplit,可以分别在垂直方向和水平方向拆分数组。

a=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(np.hsplit(a,3))    #沿水平方向拆分成3个形状相同的数组
'''
[array([[ 1],
       [ 4],
       [ 7],
       [10]]), array([[ 2],
       [ 5],
       [ 8],
       [11]]), array([[ 3],
       [ 6],
       [ 9],
       [12]])]
'''
print(np.vsplit(a,2))    #沿垂直方向拆分成2个形状相同的数组
'''
[array([[1, 2, 3],
       [4, 5, 6]]), array([[ 7,  8,  9],
       [10, 11, 12]])]
'''
示例代码:Numpy-array-shape.py