1

好的,这里给定的数据;形状有三个 numpy 数组:(i, 4, 2), (i, 4, 3), (i, 4, 2) i 在它们之间是共享的,但是是可变的。dtype 是 float32 的一切。目标是以特定顺序将它们交织在一起。让我们看看这些数组的索引 0 处的数据:

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

在这种情况下,连接的目标数组看起来像这样:

[-208, -16, 1, 1, 1, 0.496, 0.984, -192, -16, 1, 1, 1, ...]

然后继续索引 1。

我不知道如何实现这一点,因为连接函数只是不断告诉我形状不匹配。目标数组的形状并不重要,只是它的内存视图必须按照给定的顺序上传到 gpu 着色器。

编辑:我可以用一些 python for 循环来实现这一点,但性能影响将是这个程序中的一个问题。

4

2 回答 2

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])
于 2017-08-27T17:20:25.810 回答
0

我会做的是:

np.hstack([a, b, c]).flatten()

假设 a, b, c 是三个数组

于 2017-08-27T17:45:29.303 回答