假设我有一个数组p
在形状(m, n)
,一个阈值向量Ts
在形状(m)
。我想使用以下规则替换p
中的值:
for i in range(m):
for j in range(n):
if p[i, j] > Ts[i]:
p[i, j] = Ts[i]
我的实施是:
newP = np.zeros_like(p)
cond = p > Ts[:, None]
newP += cond * Ts[:, None]
newP += ~cond * p
p = newP
它看起来确实很难看。我想知道是否有类似p[cond]=Ts
风格的方法。谢谢:)
例如:
# m = 2, n = 5
p = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]])
Ts = np.array([3, 8])
expected_new_p = \
np.array([[1, 2, 3, 3, 3],
[6, 7, 8, 8, 8]])
您可以使用np.tile将阈值数组强制转换为输入数组。因此,您可以直接使用布尔索引。这可能对您有用:
您可以简单地使用
np.where
。如果不满足条件,则从广播的Ts
返回元素,否则返回相应的p
值您可以通过向} 之间的位置。然后,使用
Ts
添加额外维度来比较p
和Ts
,提取p < Ts
与^{Ts
中的值进行OVERWRITE:上面,
i
是数组的元组,包含p
的每个维度中的索引相关问题 更多 >
编程相关推荐