我有一个形状为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
答案 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)