用列表填充数组元素

时间:2019-02-20 22:40:06

标签: python arrays

我有以下数组:     b=np.zeros((5,5)).astype('int32')

我希望使用下面的两个数组用列表填充上面的数组的每个元素:     x=np.linspace(11, 15, 5)

`y=np.linspace(6, 10, 5)`

我正在查看的输出:

`array([[11,6], [11,7], [11,8], [11,9], [11,10]],
       [[12,6], [12,7], [12,8], [12,9], [12,10]],
       [[13,6], [13,7], [13,8], [13,9], [13,10]],
       [[14,6], [14,7], [14,8], [14,9], [14,10]],
       [[15,6], [15,7], [15,8], [15,9], [15,10]])`

2 个答案:

答案 0 :(得分:1)

就像@DocDriven一样,您必须首先将b数组的形状调整为(5, 5, 2)

此后,请注意,您可以通过执行y来设置b[row,:,1] = y值的整行,并通过执行x来设置b[:,col,0] = x值的整列。

Numpy还会广播形状,这意味着您可以使用1d数组填充2d数组; b[:,:,1] = y将在一次操作中填充所有y的值,而b[:,:,0] = x.reshape((5, 1))将对x的值进行相同的操作。

简而言之,您只需执行以下操作即可获得所需的内容:

b = np.zeros((5, 5, 2)).astype('int32')
b[:,:,1] = y
b[:,:,0] = x.reshape((5, 1))

另一种方法是使用np.meshgrid()

b = np.array(np.meshgrid(x, y)).T.astype('int32')

答案 1 :(得分:0)

我稍微调整了原始的numpy数组,因为您不能用序列替换单个整数。

import numpy as np

b = np.zeros((5,5,2)).astype('int32')
x = np.linspace(11, 15, 5).astype('int32')
y = np.linspace(6, 10, 5).astype('int32')

idx_x = 0
idx_y = 0

for row in b:
    for _ in row:
        b[idx_x, idx_y] = [x[idx_x], y[idx_y]]
        idx_y += 1
    idx_y = 0
    idx_x += 1

print(b.tolist())

输出:

[[[11, 6], [11, 7], [11, 8], [11, 9], [11, 10]], 
 [[12, 6], [12, 7], [12, 8], [12, 9], [12, 10]], 
 [[13, 6], [13, 7], [13, 8], [13, 9], [13, 10]], 
 [[14, 6], [14, 7], [14, 8], [14, 9], [14, 10]], 
 [[15, 6], [15, 7], [15, 8], [15, 9], [15, 10]]]

如果要将其保留为numpy数组,请不要通过tolist()对其进行强制转换。