In [92]: arr1 = np.repeat(True,10)
...: arr2 = np.repeat(np.arange(5),2)
In [93]: arr1.shape
Out[93]: (10,)
In [94]: arr2.shape
Out[94]: (10,)
Transpose 切换轴,但不添加任何轴。
In [95]: arr1.T.shape
Out[95]: (10,)
vstack(垂直)确保输入至少为 2d,并在第一个轴上连接它们
In [96]: np.vstack((arr1,arr2))
Out[96]:
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]])
In [97]: _.shape
Out[97]: (2, 10)
确实如此:
In [99]: np.concatenate((arr1.reshape(1,-1),arr2.reshape(1,-1)), axis=0)
Out[99]:
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]])
请注意,布尔值 True 已更改为数字 1,因此它与 arr2 具有相同的 dtype。
hstack 确保输入至少有 1 个维度,并在最后一个维度加入。 [source]
In [100]: np.hstack((arr1,arr2))
Out[100]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4])
In [101]: _.shape
Out[101]: (20,)
再次转置不会改变一维形状。
另一个便利功能:
In [102]: np.column_stack((arr1,arr2)).shape
Out[102]: (10, 2)
这使输入变为 2d,并在最后一个轴上连接(查看其代码了解详情)
另一个方便:
In [103]: np.stack((arr1,arr2),axis=1).shape
Out[103]: (10, 2)
In [104]: np.stack((arr1,arr2),axis=0).shape
Out[104]: (2, 10)
所有这些只是调整尺寸,然后使用concatenate。
结构化数组
In [110]: arr = np.zeros((10,), dtype='bool,i')
In [111]: arr['f0']=arr1
In [112]: arr['f1']=arr2
In [113]: arr
Out[113]:
array([( True, 0), ( True, 0), ( True, 1), ( True, 1), ( True, 2),
( True, 2), ( True, 3), ( True, 3), ( True, 4), ( True, 4)],
dtype=[('f0', '?'), ('f1', '<i4')])