python / numpy数组:之前逐项替换N行

时间:2018-05-29 11:31:42

标签: arrays numpy replace python-3.6

在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行中的任何值。

我很感激任何提示或想法。 谢谢!

1 个答案:

答案 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]]