Как я могу записать нули в двумерный массив numpy по индексам строк и столбцовPython

Программы на Python
Ответить
Anonymous
 Как я могу записать нули в двумерный массив numpy по индексам строк и столбцов

Сообщение Anonymous »

У меня есть большой (90 х 90 КБ) numpy ndarray, и мне нужно обнулить его блок. У меня есть список из примерно 30 тысяч индексов, которые указывают, какие строки и столбцы должны быть нулевыми. Индексы не обязательно являются смежными, поэтому нарезка в стиле [min:max, min:max] невозможна.
В качестве игрушечного примера я могу начать с двумерный массив ненулевых значений, но я не могу писать нули так, как ожидал.

Код: Выделить всё

import numpy as np

a = np.ones((6, 8))
indices = [2, 3, 5]

Код: Выделить всё

# I thought this would work, but it does not.
# It correctly writes to (2,2), (3,3), and (5,5), but not all
# combinations of (2, 3), (2, 5), (3, 2), (3, 5), (5, 2), or (5, 3)
a[indices, indices] = 0.0
print(a)

[[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 0. 1. 1. 1. 1. 1.]
[1. 1. 1. 0. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 0. 1. 1.]]

Код: Выделить всё

# I thought this would fix that problem, but it doesn't change the array.
a[indices, :][:, indices] = 0.0
print(a)

[[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]]
В этом игрушечном примере я надеюсь на такой результат.

Код: Выделить всё

[[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 0. 0. 1. 0. 1. 1.]
[1. 1. 0. 0. 1. 0. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 0. 0. 1. 0. 1. 1.]]
Для этого я, вероятно, мог бы написать громоздкий цикл или построить какой-нибудь комбинаторно огромный список индексов, но кажется интуитивно понятным, что это должно поддерживаться более чистым способом, я просто не могу найти синтаксис, чтобы это произошло. Есть идеи?


Подробнее здесь: https://stackoverflow.com/questions/793 ... mn-indices
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»