Инкрементальные подмножества матриц в Python - PullRequest
2 голосов
/ 29 января 2011

Я хочу увеличить небольшой подраздел (переменную) матрицы [иллюстративный код ниже] - но бег по ним с помощью циклов кажется небрежным и не элегантным - и я подозреваю, что это самый медленный способ сделать этот расчетОдна из моих идей заключалась в том, чтобы создать еще один массив из измерений, которые я хочу увеличить (2x3 в примере ниже), и заполнить этот временный массив нулями, чтобы он имел те же размеры, что и оригинал.Я мог бы тогда суммировать их.

Не знаете, как выполнить это заполнение в numpy - или это самый эффективный способ выполнить этот расчет?Я хотел бы попытаться оптимизировать это как можно больше.

>>> import numpy as np    
>>> a = np.zeros((10,10))
>>> for i in range(3,5):
...     for x in range(4,7):
...         a[i][x] += 1
>>> a
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])

Ответы [ 2 ]

7 голосов
/ 29 января 2011

Вы можете сделать то же самое просто:

 a[3:5,4:7] += 1
1 голос
/ 29 января 2011

Вы также можете использовать логические массивы для доступа к отдельным элементам вашего подмножества. Особенно удобно, когда ваша подгруппа имеет неправильную форму.

Также они работают очень хорошо. Например

In []: M= randn(2000, 2000)
In []: timeit M[M< 0]+= 10
1 loops, best of 3: 42.1 ms per loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...