python - Numpy:在数组上施加行依赖最大值

标签 python arrays numpy

假设我有以下数组:

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/

相关文章:

python - 如何检查一个张量是否存在于另一个张量中?

python - 无法在 Python 镜像上找到包 msodbcsql

python - Numpy数组切片转置内部数据

C# 在 A 类和 B 类之间传递数组

numpy - 使用 scipy.sosfilt 过滤多维数据

Python:如何使类 `__call__` 方法接受 NumPy 数组和单个值?

python - 访问 types.Literal 值

python - python 2.7下xmlrpclib.ServerProxy的多线程问题

python - 获取数组python中的最小数字

python - 在 warpAffine 变换后,如何将点重新映射或恢复到其以前的坐标系?