Python:以列方式向numpy bool数组添加值

时间:2017-06-01 04:41:29

标签: arrays numpy boolean

我有一个值列表和一个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]] 

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