Мне нужно эмулировать функцию MATLAB find
, которая возвращает линейные индексы для ненулевых элементов массива. Например:Получение линеаризованных индексов в numpy
>> a = zeros(4,4)
a =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
>> a(1,1) = 1
>> a(4,4) = 1
>> find(a)
ans =
1
16
NumPy имеет аналогичную функцию nonzero
, но он возвращает кортеж из индексных массивов. Например:
In [1]: from numpy import *
In [2]: a = zeros((4,4))
In [3]: a[0,0] = 1
In [4]: a[3,3] = 1
In [5]: a
Out[5]:
array([[ 1., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 1.]])
In [6]: nonzero(a)
Out[6]: (array([0, 3]), array([0, 3]))
Есть ли функция, которая дает мне линейные индексы, не вычисляя их самостоятельно?