#arrays #numpy #matrix #cumsum
Вопрос:
У меня есть следующий массив:
[[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]]
Спасибо
Ответ №1:
Если 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 gt; 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]]