假设我们有一组值:n
-行和6
列(n,6)。
如果第3个元素大于第4个元素,如何将第4个元素替换为等于第3个元素?
我试图以这种方式做到这一点:
griddata[:,3][griddata[:,2] > griddata[:,3]] = griddata[:,2]
TypeError:'numpy.float64'对象不支持项目分配
最佳答案
您可以使用np.where
代替:
griddata[:,3] = np.where(griddata[:,2] > griddata[:,3], griddata[:,2], griddata[:,3])
在条件(
griddata[:,3]
)为True的所有地方都将griddata[:,2]
替换为griddata[:,2] > griddata[:,3]
,否则将第三个参数(原始)替换为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]]
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^