我有一个值列表和一个numpy bool数组,如下所示:
[[False True True False False True]
[ True True True False False True]
[ True True True True True True]]
list = [1, 7, 2, 2, 3, 7, 1, 1, 4, 2, 9, 1, 2]
我的目标是通过列方式将列表中的整数添加到bool数组中的True值,如果可能,则将false值包含整数0.请记住,我正在尝试遍历bool数组以列为单位,因此最终结果如下:
[[0 2 7 0 0 9]
[ 1 2 1 0 0 1]
[ 7 3 1 4 2 2]]
答案 0 :(得分:2)
使用转置方法:
import numpy as np
boo = np.array([[False, True, True, False, False, True],
[True, True, True, False, False, True],
[True, True, True, True, True, True]])
x = np.zeros(boo.shape, dtype=int)
y = np.array([1, 7, 2, 2, 3, 7, 1, 1, 4, 2, 9, 1, 2])
x.T[boo.T] = y
print(x)
[[0 2 7 0 0 9]
[1 2 1 0 0 1]
[7 3 1 4 2 2]]
答案 1 :(得分:0)
<强>设置强>
a
Out[163]:
array([[False, True, True, False, False, True],
[ True, True, True, False, False, True],
[ True, True, True, True, True, True]], dtype=bool)
l
Out[164]: [1, 7, 2, 2, 3, 7, 1, 1, 4, 2, 9, 1, 2]
<强>解决方案强>
Use a list comprehension and pop function:
np.array([l.pop(0) if e else 0 for e in a.flatten('F')]).reshape(a.shape,order='F')
Out[177]:
array([[0, 2, 7, 0, 0, 9],
[1, 2, 1, 0, 0, 1],
[7, 3, 1, 4, 2, 2]])
另一种更冗长的方法:
#flatten a to a 1D array of int type
a2 = a.flatten('F').astype(int)
#replace 1s with values from list
a2[a2==1] = l
#reshape a2 to the shape of a
a2.reshape(a.shape,order='F')
Out[162]:
array([[0, 2, 7, 0, 0, 9],
[1, 2, 1, 0, 0, 1],
[7, 3, 1, 4, 2, 2]])