好的,这里是给定的数据; 有三个形状的numpy数组: (i,4,2),(i,4,3),(i,4,2) 我是在他们之间共享但是可变的。 对于一切,dtype都是float32。 目标是以特定顺序交织它们。让我们看看这些数组的索引0处的数据:
Rest.vue
在这种情况下,连接的目标数组看起来像这样:
[[-208. -16.]
[-192. -16.]
[-192. 0.]
[-208. 0.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 0.49609375 0.984375 ]
[ 0.25390625 0.984375 ]
[ 0.25390625 0.015625 ]
[ 0.49609375 0.015625 ]]
然后继续索引1。
我不知道如何实现这一点,因为连接函数只是告诉我形状不匹配。目标数组的形状并不重要,只是它的内存视图必须按照给定的顺序上传到gpu着色器。
编辑:我可以通过一些python for循环实现这一点,但性能影响将是这个程序中的一个问题。
答案 0 :(得分:2)
使用np.dstack
并展平np.ravel()
-
np.dstack((a,b,c)).ravel()
现在,np.dstack
基本上沿第三轴堆叠。所以,我们也可以沿着那个轴使用np.concatenate
,就像这样 -
np.concatenate((a,b,c),axis=2).ravel()
示例运行 -
1)设置输入数组:
In [613]: np.random.seed(1234)
...: n = 3
...: m = 2
...: a = np.random.randint(0,9,(n,m,2))
...: b = np.random.randint(11,99,(n,m,2))
...: c = np.random.randint(101,999,(n,m,2))
...:
2)检查输入值:
In [614]: a
Out[614]:
array([[[3, 6],
[5, 4]],
[[8, 1],
[7, 6]],
[[8, 0],
[5, 0]]])
In [615]: b
Out[615]:
array([[[84, 58],
[61, 87]],
[[48, 45],
[49, 78]],
[[22, 11],
[86, 91]]])
In [616]: c
Out[616]:
array([[[104, 359],
[376, 560]],
[[472, 720],
[566, 115]],
[[344, 556],
[929, 591]]])
3)输出:
In [617]: np.dstack((a,b,c)).ravel()
Out[617]:
array([ 3, 6, 84, 58, 104, 359, 5, 4, 61, 87, 376, 560, 8,
1, 48, 45, 472, 720, 7, 6, 49, 78, 566, 115, 8, 0,
22, 11, 344, 556, 5, 0, 86, 91, 929, 591])
答案 1 :(得分:0)
我要做的是:
np.hstack([a, b, c]).flatten()
假设a,b,c是三个数组