Добавьте столбец в массив numpy, который будет учитываться при изменении строк

#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]]