6

I am attempting to add two arrays.

np.zeros((6,9,20)) + np.array([1,2,3,4,5,6,7,8,9])

I want to get something out that is like

array([[[ 1.,  1.,  1., ...,  1.,  1.,  1.],
        [ 2.,  2.,  2., ...,  2.,  2.,  2.],
        [ 3.,  3.,  3., ...,  3.,  3.,  3.],
        ..., 
        [ 7.,  7.,  7., ...,  7.,  7.,  7.],
        [ 8.,  8.,  8., ...,  8.,  8.,  8.],
        [ 9.,  9.,  9., ...,  9.,  9.,  9.]],

       [[ 1.,  1.,  1., ...,  1.,  1.,  1.],
        [ 2.,  2.,  2., ...,  2.,  2.,  2.],
        [ 3.,  3.,  3., ...,  3.,  3.,  3.],
        ..., 
        [ 7.,  7.,  7., ...,  7.,  7.,  7.],
        [ 8.,  8.,  8., ...,  8.,  8.,  8.],
        [ 9.,  9.,  9., ...,  9.,  9.,  9.]],

So adding entries to each of the matrices at the corresponding column. I know I can code it in a loop of some sort, but I am trying to use a more elegant / faster solution.

4

3 回答 3

6

您可以在使用orbroadcasting扩展第二个数组的维度后发挥作用,就像这样 -Nonenp.newaxis

np.zeros((6,9,20))+np.array([1,2,3,4,5,6,7,8,9])[None,:,None]
于 2015-08-29T07:40:46.553 回答
4

如果我理解正确,最好使用NumPy 的 Broadcasting。您可以通过以下方式获得您想要的:

np.zeros((6,9,20))+np.array([1,2,3,4,5,6,7,8,9]).reshape((1,9,1))

我更喜欢使用reshape 方法而不是像 Divakar 显示的那样对索引使用切片表示法,因为我已经做了很多工作来将形状作为变量进行操作,并且在变量中传递元组比切片更容易一些。您还可以执行以下操作:

array1.reshape(array2.shape)

顺便说一句,如果您真的在寻找像沿轴从 0 到 N-1 运行的数组这样简单的东西,请查看mgrid。你可以得到你的上述输出

np.mgrid[0:6,1:10,0:20][1]
于 2015-08-29T08:02:50.807 回答
0

您可以使用瓷砖(但您还需要交换轴来获得正确的形状)。

A = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
B = np.tile(A, (6, 20, 1))
C = np.swapaxes(B, 1, 2)
于 2015-08-29T07:48:44.357 回答