Как указать столбцы при использовании повторяющихся индексов с numpy [для использования с np.add.at ()] - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь применить оператор сложения к массиву, где я хочу, чтобы повторяющиеся индексы указывали на повторяющиеся операции сложения. Из Python Data Science Book (https://jakevdp.github.io/PythonDataScienceHandbook/02.07-fancy-indexing.html), кажется, что это возможно при использовании np.add.at(original matrix, indices, thing to add), но я не могу понять, как указать индексы для работы со столбцами, а не со строками.

например. Пустышка Пример

# Create Array
A = np.arange(12)
A = A.reshape(4,3)
print(A)

дает

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

и

# Create columns to add to A (in reality, all values won't be the same)
B = np.ones_like(A[:, [0,0]])
print(adder)

дает

[[1 1]
 [1 1]
 [1 1]
 [1 1]]

Я хочу выполнить операцию A[:, [0, 0]] += B, но с использованием системы, в которой повторяющиеся индексы указывают на повторяющиеся операции (поэтому в этом случае оба столбца B добавляются в столбец 0). Результат должен быть таким:

[[ 2  1  2]
 [ 5  4  5]
 [ 7  7  8]
 [ 11 10 11]]

Это можно сделать, используя np.add.at(A, I, B) Я полагаю, но как мне указать индексы I, соответствующие [:, [0,0]], поскольку это дает синтаксическую ошибку (кажется, что матрица индексов не может содержать : персонаж?).

Спасибо

1 Ответ

0 голосов
/ 12 ноября 2018
In [12]: A = np.arange(12).reshape(4,3)
In [13]: np.add.at(A, (slice(None), [0,0]), 1)
In [14]: A
Out[14]: 
array([[ 2,  1,  2],
       [ 5,  4,  5],
       [ 8,  7,  8],
       [11, 10, 11]])

Это также можно записать с помощью s_, поскольку

np.add.at(A, np.s_[:, [0,0]], 1)

s_ - это объект класса, который позволяет нам использовать индексную нотацию для создания необходимого кортежа.В контексте индексации интерпретатор Python преобразует : в slice объект.

In [19]: np.s_[:, [0,0]]
Out[19]: (slice(None, None, None), [0, 0])
...