gpt4 book ai didi

python - numpy 多维数组的条件运算

转载 作者:太空狗 更新时间:2023-10-30 01:16:42 25 4
gpt4 key购买 nike

我是一个 numpy 的初学者,我需要你的帮助来解决以下问题:我想用第三个数组替换多维数组中小于第二个数组的一些元素;例如:

x = np.arange(16).reshape((2, 8)) 
# x = np.array([[ 0, 1, 2, 3, 4, 5, 6, 7],
# [ 8, 9, 10, 11, 12, 13, 14, 15]])

y = np.array([[2], [13]])
# y = np.array([[ 2], [13]])

现在,找出 x 大于 y 的地方,如果 x > y 中至少有一个 True 数组,计算这些实例,创建另一个数组(z)并将这些元素中的 x 替换为 z:

x > y 
# = [[False, False, False, True, True, True, True, True],
# [False, False, False, False, False, False, True, True]]

在这种情况下,x (x[:,3:]) 的 5 个元素应该被替换,所以我们创建一个 (5, 2) 数组:

z = np.array([[20,21],[22,23],[24,25],[26,27],[28,29]])

我想要的结果是

x == np.array([[ 0,  1,  2, 20, 22, 24, 26, 28],
[ 8, 9, 10, 21, 23, 25, 27, 29]])

最佳答案

一个 numpy 函数几乎正是你想要的是 numpy.where:

x = np.arange(16).reshape((2, 8))
y = np.array([[2], [13]])
z = np.arange(16, 32).reshape((2, 8))
numpy.where(~(x > y).any(axis=0), x, z)

结果:

array([[ 0,  1,  2, 19, 20, 21, 22, 23],
[ 8, 9, 10, 27, 28, 29, 30, 31]])

这与您要求的唯一区别是 z 必须可广播为与 x 相同的形状。除非您绝对需要使用一个 z 值,其列数与 ~(x > y) 中的 True 值一样多.any(axis=0),我认为这是最好的方法。

但是,鉴于您的评论,您似乎确实需要使用如上所述的 z 值。听起来该函数可以保证形状匹配,所以您可以这样做:

x[:,(x > y).any(axis=0)] = z.T

测试:

>>> z = np.arange(20, 30).reshape((5, 2))
>>> x[:,(x > y).any(axis=0)] = z.T
>>> x
array([[ 0, 1, 2, 20, 22, 24, 26, 28],
[ 8, 9, 10, 21, 23, 25, 27, 29]])

关于python - numpy 多维数组的条件运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11469216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com