Как выбрать максимальное значение по всем строкам из списка scipy.sparse.arrays? - PullRequest
0 голосов
/ 25 января 2012

Рассмотрим список n scipy.sparse.arrays с записями типа float. Я использую в формате Compressed Sparse Row структура.

my_list = [sparse_array_1, sparse_array_2, ... , sparse_array_n]

Каждый sparse_array_i имеет одинаковую длину.

То, что я хочу сгенерировать, это список максимальных значений для каждой строки. Итак, этот пример

[array[0,  array[4,       array[88,
       3,        2,             287,
       99,        1234,         0,
       3],       0],            77]

приведет к

[88, 287, 1324, 77]

Возможно ли это по-питонски?

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Я не знаком с scipy разреженными массивами, но если они будут вести себя как другие python итерируемые , то комбинация map и zip достигнет того, что выхочу:

>>> arr
[[0, 3, 99, 3], [4, 2, 1234, 0], [88, 287, 0, 77]]
>>> zip(*arr)
[(0, 4, 88), (3, 2, 287), (99, 1234, 0), (3, 0, 77)]
>>> map(max, zip(*arr))
[88, 287, 1234, 77]
1 голос
/ 28 июня 2012

Вот ответ для двух разреженных матриц: просто повторите это n-1 раз.

import numpy as np
def spmax(X,Y):
   # X,Y two csr sparse matrices
   sX = X.copy(); sX.data[:] = 1
   sY = Y.copy(); sY.data[:] = 1
   sXY = sX+sY; sXY.data[:] = 1
   X = X+sXY; X.data = X.data-1
   Y = Y+sXY; Y.data = Y.data-1
   maxXY = X.copy()
   maxXY.data = np.amax(np.c_[X.data,Y.data],axis=1)
   return maxXY

Это довольно медленно, хотя. Надеемся, что в какой-то момент они реализуют это в scipy.sparse. Это довольно простая операция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...