假设我们有一组值:-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]
与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]]
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句