Преобразовать матрицу в кортежи - PullRequest
0 голосов
/ 31 декабря 2018

Скажем, я сгенерировал последовательность значений, разделил их на предоставленный диапазон, а затем увеличил каждое значение в каждой строке на этот текущий идентификатор строки, а затем замаскировал некоторые значения за пределы требуемого диапазона, как показано ниже:

>>> range = 5
>>> matrix = np.arange(-5, 10, 1)
>>> matrix = np.tile(matrix, (range, 1))
>>> matrix = np.add(matrix, np.arange(0, range)[:, None])
>>> matrix = ma.masked_outside(matrix, 0, 10)
[[-- -- -- -- -- 0 1 2 3 4 5 6 7 8 9]
 [-- -- -- -- 0 1 2 3 4 5 6 7 8 9 10]
 [-- -- -- 0 1 2 3 4 5 6 7 8 9 10 --]
 [-- -- 0 1 2 3 4 5 6 7 8 9 10 -- --]
 [-- 0 1 2 3 4 5 6 7 8 9 10 -- -- --]]

Как бы вы лучше всего преобразовали вышеприведенный вывод в матрицу формата [non-masked value, row-id], то есть:

[0,0], [1, 0], [2,0] ... [10, 4]

Кроме того, является ли исходный код слишком расточительным для достижения конечного желаемого шага?

1 Ответ

0 голосов
/ 31 декабря 2018

Играя с вашим matrix Я произвел это:

In [50]: np.stack((matrix.compressed(), np.where(~matrix.mask)[0]),1)
Out[50]: 
array([[ 0,  0],
       [ 1,  0],
       [ 2,  0],
       [ 3,  0],
       [ 4,  0],
       [ 5,  0],
       [ 6,  0],
       [ 7,  0],
       [ 8,  0],
       [ 9,  0],
      ....

Возможно, мы могли бы пропустить шаг маскированного массива, создав непосредственно mask.Например, compressed производится matrix.data[~matrix.mask].

In [52]: mask = ~matrix.mask
In [53]: data = matrix.data
In [54]: np.stack((data[mask], np.where(mask)[0]), 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...