我有一个看起来像这样的布尔数组:
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]]
)
有这样的功能吗?
答案 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 "