Как накопить матрицу с определенной позицией без цикла for?

sum = np.zeros((3,3))
m = np.array([[0,1,1],[1,2,0],[0,0,1]])
arr = np.array([[0],[1],[2]])
time = np.array([[10,20,30],[40,50,60],[70,80,90]])

И я хочу сделать это так:

sum[arr,m[:,[0]]] += time[:,[0]]
sum[arr,m[:,[1]]] += time[:,[1]]
sum[arr,m[:,[2]]] += time[:,[2]]
>>> sum
array([[ 10.,  50.,   0.],
       [ 60.,  40.,  50.],
       [150.,  90.,   0.]])

Как я могу сделать это без цикла for?

Все, что вы делаете, можно выполнить с помощью других статистических инструментов, таких как pandas.pivot_table. Просто создайте фрейм данных, а все остальное вы сделаете одной командой.

onyambu 16.05.2022 06:42

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 16.05.2022 07:09
np.add.at(sum, (arr,m), time) ? Пожалуйста, избегайте затенения встроенных функций.
Michael Szczesny 16.05.2022 09:27
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
1
3
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот простой подход:

sum = np.zeros((3,3))
vals = np.c_[np.indices(m.shape)[0].flatten(), m.flatten()].T
_, idx, inverse = np.unique( np.char.add(*vals.astype('str')),True, True)
sum[tuple(vals[:,idx])] = np.bincount(np.arange(idx.size)[inverse], time.flatten())

out[]
array([[ 10.,  50.,   0.],
       [ 60.,  40.,  50.],
       [150.,  90.,   0.]])

IMO, этот код слишком сложен и его трудно поддерживать. Комментарии будут полезны. Также вы пропустили, что arr представлен как переменная.

Vitalizzare 16.05.2022 12:30

Другие вопросы по теме

Похожие вопросы

Как решить систему ОДУ с помощью Scipy, когда переменные в уравнениях генерируются автоматически
Чтение матрицы из файла
Как добавить постоянное значение к оси 1 (только) массива 2d numpy?
Pandas foward заполняет между ними - те же значения
Список элементов массива numpy - ValueError: значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any() или a.all()
Манипулирование данными Pandas из столбца в элементы строки
Как отсортировать трехмерный замаскированный массив numpy по оси времени в каждой сетке, то есть на определенной широте и долготе для набора климатических данных
Как совместить зимние месяцы, которые охватывают 2 года?
Использование функции numpy.where с несколькими условиями, но получение valueError
Работа с мультииндексным фреймом данных для получения результатов суммирования по логическому столбцу на основе условия из другого столбца