向 numpy 数组添加一列,计算行是否更改

Add a column to a numpy array that counts if rows change

我有以下数组:

[[1 2 1 0 2 0]
[1 2 1 0 2 0]
[1 2 1 0 2 0]
[1 2 1 0 2 0]
[0 1 2 1 0 0]
[0 1 2 1 0 0]
[0 0 1 0 1 0]
[0 0 0 1 1 0]
[0 0 0 0 1 0]
[0 0 0 0 0 1]]

我需要向此数组添加一列,每当行中的值从数字 3 开始更改时添加一个数字。因此结果将如下所示:

[[1 2 1 0 2 0 3]
[1 2 1 0 2 0 3]
[1 2 1 0 2 0 3]
[1 2 1 0 2 0 3]
[0 1 2 1 0 0 4]
[0 1 2 1 0 0 4]
[0 0 1 0 1 0 5]
[0 0 0 1 1 0 6]
[0 0 0 0 1 0 7]
[0 0 0 0 0 1 8]]

谢谢

如果 a 是您的数组:

a = np.array([[1, 2, 1, 0, 2, 0], [1, 2, 1, 0, 2, 0], [1, 2, 1, 0, 2, 0], [1, 2, 1, 0, 2, 0],
              [0, 1, 2, 1, 0, 0], [0, 1, 2, 1, 0, 0], [0, 0, 1, 0, 1, 0], [0, 0, 0, 1, 1, 0],
              [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]])

使用以下代码可以获得结果:

n = 3
a = a.tolist()
for i, j in enumerate(a):
    if i == 0:
        j.append(n)
    elif i > 0 and j == a[i-1][:-1]:
        j.append(n)
    else:
        n += 1
        j.append(n)

# a = np.array(a)

这将给出:

[[1 2 1 0 2 0 3]
 [1 2 1 0 2 0 3]
 [1 2 1 0 2 0 3]
 [1 2 1 0 2 0 3]
 [0 1 2 1 0 0 4]
 [0 1 2 1 0 0 4]
 [0 0 1 0 1 0 5]
 [0 0 0 1 1 0 6]
 [0 0 0 0 1 0 7]
 [0 0 0 0 0 1 8]]