我有以下数组:
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]])`
答案 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()
对其进行强制转换。