[英]combining 2D arrays to 3D arrays
你好,我有3個numpy數組,如下所示。
>>> print A
[[ 1. 0. 0.]
[ 3. 0. 0.]
[ 5. 2. 0.]
[ 2. 0. 0.]
[ 1. 2. 1.]]
>>> print B
[[ 5. 9. 9.]
[ 37. 8. 9.]
[ 49. 8. 3.]
[ 3. 3. 1.]
[ 4. 4. 5.]]
>>>
>>> print C
[[ 0. 0. 0.]
[ 0. 6. 0.]
[ 1. 4. 6.]
[ 6. 2. 0.]
[ 0. 5. 4.]]
我想把它們組合起來
[[[ 1. 0. 0.]
[ 5. 9. 9.]
[ 0. 0. 0.]]
[[ 3. 0. 0.]
[ 37. 8. 9.]
[ 0. 6. 0.]]
[[ 5. 2. 0.]
[ 49. 8. 3.]
[ 1. 4. 6.]]
[[ 2. 0. 0.]
[ 3. 3. 1.]
[ 6. 2. 0.]]
[[ 1. 2. 1.]
[ 4. 4. 5.]
[ 0. 5. 4.]]]
那是我想從每個數組中取一行。 誰能告訴我一個簡單的方法呢? 我已經嘗試過hstack
, vstack
。 但他們沒有給出理想的結果。
謝謝 !
使用np.stack
使這個變得微不足道:
>>> np.stack([A, B, C], axis=1) # stack along a new axis in axis 1 of the result
array([[[ 1, 0, 0],
[ 5, 9, 9],
[ 0, 0, 0]],
[[ 3, 0, 0],
[37, 8, 9],
[ 0, 6, 0]],
[[ 5, 2, 0],
[49, 8, 3],
[ 1, 4, 6]],
[[ 2, 0, 0],
[ 3, 3, 1],
[ 6, 2, 0]],
[[ 1, 2, 1],
[ 4, 4, 5],
[ 0, 5, 4]]])
使用numpy dstack
的解決方案:
>>> import numpy as np
>>> np.dstack((a,b,c)).swapaxes(1,2)
array([[[ 1, 0, 0],
[ 5, 9, 9],
[ 0, 0, 0]],
[[ 3, 0, 0],
[37, 8, 9],
[ 0, 6, 0]],
[[ 5, 2, 0],
[49, 8, 3],
[ 1, 4, 6]],
[[ 2, 0, 0],
[ 3, 3, 1],
[ 6, 2, 0]],
[[ 1, 2, 1],
[ 4, 4, 5],
[ 0, 5, 4]]])
>>> np.hstack([a,b,c]).reshape((5,3,3))
array([[[ 1., 0., 0.],
[ 5., 9., 9.],
[ 0., 0., 0.]],
[[ 3., 0., 0.],
[ 37., 8., 9.],
[ 0., 6., 0.]],
[[ 5., 2., 0.],
[ 49., 8., 3.],
[ 1., 4., 6.]],
[[ 2., 0., 0.],
[ 3., 3., 1.],
[ 6., 2., 0.]],
[[ 1., 2., 1.],
[ 4., 4., 5.],
[ 0., 5., 4.]]])
我想我有一些有用的東西:
>>> print np.hstack([A[:, None, :], B[:, None, :], C[:, None, :]])
[[[ 1 0 0]
[ 5 9 9]
[ 0 0 0]]
[[ 3 0 0]
[37 8 9]
[ 0 6 0]]
[[ 5 2 0]
[49 8 3]
[ 1 4 6]]
[[ 2 0 0]
[ 3 3 1]
[ 6 2 0]]
[[ 1 2 1]
[ 4 4 5]
[ 0 5 4]]]
>>> import numpy as np
>>> A = np.array([[1,0,0],[3,0,0],[5,2,0],[2,0,0],[1,2,1]])
>>> B = np.array([[5,9,9],[37,8,9],[49,8,3],[3,3,1],[4,4,5]])
>>> C = np.array([[0,0,0],[0,6,0],[1,4,6],[6,2,0],[0,5,4]])
>>> np.array([A,B,C]).swapaxes(1,0)
array([[[ 1, 0, 0],
[ 5, 9, 9],
[ 0, 0, 0]],
[[ 3, 0, 0],
[37, 8, 9],
[ 0, 6, 0]],
[[ 5, 2, 0],
[49, 8, 3],
[ 1, 4, 6]],
[[ 2, 0, 0],
[ 3, 3, 1],
[ 6, 2, 0]],
[[ 1, 2, 1],
[ 4, 4, 5],
[ 0, 5, 4]]])
我使用Ipython %%timeit
對答案進行了比較:
np.array([A,B,C]).swapaxes(1,0)
100000 loops, best of 3: 18.2 us per loop
np.dstack((A,B,C)).swapaxes(1,2)
100000 loops, best of 3: 19.8 us per loop
np.hstack([A,B,C]).reshape((5,3,3))
100000 loops, best of 3: 14.8 us per loop
np.hstack([A[:, None, :], B[:, None, :], C[:, None, :]])
100000 loops, best of 3: 17.2 us per loop
看起來@Viktor Kerkez的答案是最快的。
無需使用vstack
, hstack
。 只需使用np.swapaxes
交換軸:
>>> d=array([a, b, c])
>>> d
array([[[ 1, 0, 0],
[ 3, 0, 0],
[ 5, 2, 0],
[ 2, 0, 0],
[ 1, 2, 1]],
[[ 5, 9, 9],
[37, 8, 9],
[49, 8, 3],
[ 3, 3, 1],
[ 4, 4, 5]],
[[ 0, 0, 0],
[ 0, 6, 0],
[ 1, 4, 6],
[ 6, 2, 0],
[ 0, 5, 4]]])
>>> swapaxes(d, 0, 1)
array([[[ 1, 0, 0],
[ 5, 9, 9],
[ 0, 0, 0]],
[[ 3, 0, 0],
[37, 8, 9],
[ 0, 6, 0]],
[[ 5, 2, 0],
[49, 8, 3],
[ 1, 4, 6]],
[[ 2, 0, 0],
[ 3, 3, 1],
[ 6, 2, 0]],
[[ 1, 2, 1],
[ 4, 4, 5],
[ 0, 5, 4]]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.