Python替换数组中的最大值

时间:2016-04-11 16:16:48

标签: python numpy max

我有一个形状为10 x 5 x 3的3D numpy数组A。我还有一个长度为3的B向量(最后一个轴的长度为A)。我想将每个A[:,:,i]B[i] i = 0:2进行比较,并将所有值A[:,:,i] > B[i]替换为B[i]

有没有办法在没有for循环的情况下实现这一目标。

修改:我使用for循环在argmax之间尝试i = 0:2 python replace values in 2d numpy array

1 个答案:

答案 0 :(得分:3)

您可以使用numpy.minimum来完成此操作。它返回两个数组之间的元素最小值。如果数组的大小不同(例如在您的情况下),那么在比较之前,数组会自动广播到正确的大小。

A = numpy.random.rand(1,2,3)
# array([[[ 0.79188   ,  0.32707664,  0.18386629],
#         [ 0.4139146 ,  0.07259663,  0.47604274]]])

B = numpy.array([0.1, 0.2, 0.3])

C = numpy.minimum(A, B)
# array([[[ 0.1       ,  0.2       ,  0.18386629],
#         [ 0.1       ,  0.07259663,  0.3       ]]])

@Divakar建议您是否要进行就地替换:

numpy.minimum(A, B, out=A)