除以更大的减法值
Dividing by bigger value of substraction
我有两个形状为 (43, 25520)
的矩阵,它们分别称为 m1
和 m2
。
if m1 <= m2:
distance = (m1 - m2) / m2
else:
distance = (m1 - m2) / m1
所以对于每个索引 i
,我想从 m1[i]
中减去 m2[i]
,然后除以这两个中较大的值。
我的错误信息是
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
如何修复错误并完成我想要的。
np.maximum
returns 两个矩阵的元素最大值:
(m1 - m2) / np.maximum(m1, m2)
如果您只需要小于一的正值,请使用 np.absolute
:
np.absolute((m1 - m2) / np.maximum(m1, m2))
或者,您可以这样做
(np.maximum(m1, m2) - np.minimum(m1, m2)) / np.maximum(m1, m2))
出现错误的原因是表达式 m1 >= m2
是一个与两个数组大小相同的布尔掩码。您无法将大量布尔值转换为单个布尔值,即使可以,if
和 else
中的表达式也会对整个数组进行运算。您需要矢量化条件,我已经向您展示了如何操作。
我有两个形状为 (43, 25520)
的矩阵,它们分别称为 m1
和 m2
。
if m1 <= m2:
distance = (m1 - m2) / m2
else:
distance = (m1 - m2) / m1
所以对于每个索引 i
,我想从 m1[i]
中减去 m2[i]
,然后除以这两个中较大的值。
我的错误信息是
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
如何修复错误并完成我想要的。
np.maximum
returns 两个矩阵的元素最大值:
(m1 - m2) / np.maximum(m1, m2)
如果您只需要小于一的正值,请使用 np.absolute
:
np.absolute((m1 - m2) / np.maximum(m1, m2))
或者,您可以这样做
(np.maximum(m1, m2) - np.minimum(m1, m2)) / np.maximum(m1, m2))
出现错误的原因是表达式 m1 >= m2
是一个与两个数组大小相同的布尔掩码。您无法将大量布尔值转换为单个布尔值,即使可以,if
和 else
中的表达式也会对整个数组进行运算。您需要矢量化条件,我已经向您展示了如何操作。