假设我有以下数组:
a = [[1, 4, 2, 3]
[3, 1, 5, 4]
[4, 3, 1, 2]]
我想做的是对数组施加一个最大值,但该最大值因行而异。例如,如果我想将第 1 行和第 3 行的最大值限制为 3,将第 2 行的值限制为 4,我可以创建如下内容:
[[1, 3, 2, 3]
[3, 1, 4, 4]
[3, 3, 1, 2]
有没有比单独遍历每一行并将其设置为“非零”更好的方法?
最佳答案
与 numpy.clip
(这里使用方法版本):
a.clip(max=np.array([3, 4, 3])[:, None]) # np.clip(a, ...)
# array([[1, 3, 2, 3],
# [3, 1, 4, 4],
# [3, 3, 1, 2]])
广义的:
def clip_2d_rows(a, maxs):
maxs = np.asanyarray(maxs)
if maxs.ndim == 1:
maxs = maxs[:, np.newaxis]
return np.clip(a, a_min=None, a_max=maxs)
使用模块级函数 (np.clip
) 可能比类方法 (np.ndarray.clip
) 更安全。前者使用 a_max
作为参数,而后者使用内置的 max
作为参数,这绝不是一个好主意。
关于python - Numpy:在数组上施加行依赖最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47371439/