如何使用numpy布尔数组修改另一个numpy数组?

时间:2019-06-26 16:09:37

标签: python numpy

我有一个看起来像这样的布尔数组:

arr_a = np.array(
[[False, False, False],
[True, True, True],
[True, True, True],
[False, False, False]]
)

和另一个看起来像这样的数组:

arr_b = np.array(
[[100, 100, 100],
[200, 200, 200]]
)

我正在寻找一个可以像这样调用的函数:np.boolean_combine(arr_a, arr_b),返回一个数组,该数组将arr_a中的1替换为arr_b中的值,最终结果如下所示:

np.array(
[[0, 0, 0]
[100, 100, 100],
[200, 200, 200],
[0, 0, 0]]
)

有这样的功能吗?

3 个答案:

答案 0 :(得分:2)

您可以创建与dtype相同的arra_b的新数组,使用arr_a进行切片视图,并分配arra_b中的值:

out = arr_a.astype(arra_b.dtype)
out[arr_a] = arra_b.ravel()

array([[  0,   0,   0],
       [100, 100, 100],
       [200, 200, 200],
       [  0,   0,   0]])

答案 1 :(得分:1)

如果您的arr_a由1和0组成:

import numpy as np 
arr_a = np.array(
[[0, 0, 0],
[1, 1, 1],
[1, 1, 1],
[0, 0, 0]])
arra_b = np.array(

[[100, 100, 100],

[200, 200, 200]])


arr_a[np.where(arr_a)]  = arra_b.reshape(arr_a[np.where(arr_a)].shape)

如果形状是匹配的,这会起作用

答案 2 :(得分:0)

您可以使用def boolean_combine(arr_a, arr_b) -> np.array: combined = [] for row_a, row_b in zip(arr_a, arr_b): row_combined = [] for a, b in zip(row_a, row_b): if a == 'True': row_combined.append(b) else: row_combined.append(a) combined.append(np.asarray(row_combined)) return np.asarray(combined) 。假设arr_a和arr_b(显然是出于您的问题)尺寸相同:

combined = boolean_combine(arr_a, arr_b)

然后,您只需输入bp = " #{params[:systolic] / #{params[:diastolic]} " > bp = " 120/80 "

就可以在主菜单中调用此函数。