在python 3(3.6.5)中,我有一个(更长)numpy数组中的数据,如下所示:
import maya.cmds as cmds
cmds.polyPlane(width=40, height=60)
对于这个问题,可以忽略前两列。在第三个中,我想用同一列中的值替换所有data = np.array([[16347, 0, 60],[16353, 0, 92],[16382, 0, 1],[17867, 0, 2],[20188, 0, 3],[21459, 0, 512],[21873, 0, 71],[22031, 0, 4],[23072, 0, 61],[25378, 0, 60],[25385, 0, 82],[25410, 0, 1],[26895, 0, 2],[29233, 0, 3],[31695, 0, 71],[31845, 0, 4],[32886, 0, 61],[35069, 0, 60],[35075, 0, 90],[35104, 0, 1]])
条目,之前是2行。例如,在示例数据中,第4行有2
,应该用第2行中的数字2
替换。同样,第13行的92
需要在第11行被2
替换,依此类推。
简而言之,我需要在numpy数组中的列中搜索所有82
个条目,并将它们替换为之前相同列2行中的任何值。
我很感激任何提示或想法。 谢谢!
答案 0 :(得分:0)
您可以使用np.where()和np.roll()来执行此操作:
data[:,-1]=where(data[:,-1]==2,np.roll(data[:,-1],2),data[:,-1])
下面
data[:,-1]
隔离您感兴趣的第3列,where()返回一个填充了依赖于条件的值的数组。如果值等于2的条件为True,则返回
中的相应值np.roll(data[:,-1],2)
这是原始列向前移动了2,最后两个值没有成为前两个值。
输入数组的结果是:
[[16347 0 60]
[16353 0 92]
[16382 0 1]
[17867 0 2]
[20188 0 3]
[21459 0 512]
[21873 0 71]
[22031 0 4]
[23072 0 61]
[25378 0 60]
[25385 0 82]
[25410 0 1]
[26895 0 2]
[29233 0 3]
[31695 0 71]
[31845 0 4]
[32886 0 61]
[35069 0 60]
[35075 0 90]
[35104 0 1]]
是理想的:
[[16347 0 60]
[16353 0 92]
[16382 0 1]
[17867 0 92]
[20188 0 3]
[21459 0 512]
[21873 0 71]
[22031 0 4]
[23072 0 61]
[25378 0 60]
[25385 0 82]
[25410 0 1]
[26895 0 82]
[29233 0 3]
[31695 0 71]
[31845 0 4]
[32886 0 61]
[35069 0 60]
[35075 0 90]
[35104 0 1]]