繁体   English   中英

二维数组上的numpy逻辑运算

[英]numpy logical operation on 2D array

假设我们有一组值: n行和6列 (n,6)。 如果第 3 个元素大于第 4 个,如何将一行中的第 4 个元素替换为等于第 3 个元素?

我试图以这样的方式做到这一点:。

griddata[:,3][griddata[:,2] > griddata[:,3]] = griddata[:,2]

类型错误:'numpy.float64' 对象不支持项目分配

你可以使用np.where代替:

griddata[:,3] = np.where(griddata[:,2] > griddata[:,3], griddata[:,2], griddata[:,3])

这将griddata[:,3]替换为griddata[:,2]条件( griddata[:,2] > griddata[:,3] )为 True 否则使用第三个参数(原始): griddata[:,3]

一个小样本:

>>> griddata = np.array([[1,2,3,4,5,6], [6,5,4,3,2,1]])
>>> griddata
array([[1, 2, 3, 4, 5, 6],
       [6, 5, 4, 3, 2, 1]])

>>> griddata[:,3] = np.where([griddata[:,2] > griddata[:,3]], griddata[:,2], 
>>> griddata
array([[1, 2, 3, 4, 5, 6],
       [6, 5, 4, 4, 2, 1]])

为什么你的方法行不通:

griddata[:,3][griddata[:,2] > griddata[:,3]]包含x元素,其中x是条件的True数量,但是griddata[:,2]始终包含n元素。 因此,在任何情况下(除非所有行的griddata[:,2] > griddata[:,3]为 True),您将尝试将n项目放入x个插槽中。 那是行不通的。

您需要屏蔽两侧才能使其正常工作:

griddata[:,3][griddata[:,2] > griddata[:,3]] = griddata[:,2][griddata[:,2] > griddata[:,3]]
#                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM