[英]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.