Numpy 数组:遍历列并根据当前值和下一个值更改值
Numpy array: iterate through column and change value based on the current value and the next value
我有一个这样的数组:
这是我最近在别处问的一个问题的扩展 。我有一个像这样的 numpy 数组:
data = np.array([
[1,2,3],
[1,2,3],
[1,2,101],
[4,5,111],
[4,5,6],
[4,5,6],
[4,5,101],
[4,5,112],
[4,5,6],
])
在第三列中,如果下一个是 101
并且当前一个是 6
,我希望将值替换为 10001。这将导致这样的数组:
data = np.array([
[1,2,3],
[1,2,3],
[1,2,101],
[4,5,111],
[4,5,6],
[4,5,10001],
[4,5,101],
[4,5,112],
[4,5,6],
])
如有任何帮助,我们将不胜感激!谢谢!
使用numpy.roll
的一种方式:
s = data[:, 2]
data[np.logical_and(s == 6, np.roll(s, -1) == 101), 2] = 10001
输出:
array([[ 1, 2, 3],
[ 1, 2, 3],
[ 1, 2, 101],
[ 4, 5, 111],
[ 4, 5, 6],
[ 4, 5, 10001],
[ 4, 5, 101],
[ 4, 5, 112],
[ 4, 5, 6]])
同时我也想出了一个可行的解决方案:
data[
(data[:,2] == 6)
&
(np.roll(data[:,2]==101,-1,0)),2
] = 10001
我有一个这样的数组:
这是我最近在别处问的一个问题的扩展
data = np.array([
[1,2,3],
[1,2,3],
[1,2,101],
[4,5,111],
[4,5,6],
[4,5,6],
[4,5,101],
[4,5,112],
[4,5,6],
])
在第三列中,如果下一个是 101
并且当前一个是 6
,我希望将值替换为 10001。这将导致这样的数组:
data = np.array([
[1,2,3],
[1,2,3],
[1,2,101],
[4,5,111],
[4,5,6],
[4,5,10001],
[4,5,101],
[4,5,112],
[4,5,6],
])
如有任何帮助,我们将不胜感激!谢谢!
使用numpy.roll
的一种方式:
s = data[:, 2]
data[np.logical_and(s == 6, np.roll(s, -1) == 101), 2] = 10001
输出:
array([[ 1, 2, 3],
[ 1, 2, 3],
[ 1, 2, 101],
[ 4, 5, 111],
[ 4, 5, 6],
[ 4, 5, 10001],
[ 4, 5, 101],
[ 4, 5, 112],
[ 4, 5, 6]])
同时我也想出了一个可行的解决方案:
data[
(data[:,2] == 6)
&
(np.roll(data[:,2]==101,-1,0)),2
] = 10001