Как мне преобразовать некоторый DistributedMatrix обратно в массив Numpy или разреженный массив Scipy?
Очевидно, это не то, что я хочу делать с большим массивом, но это полезно для отладки и тестирования кода перед его запуском на действительно больших данных.






Вот наивное преобразование IndexedRowMatrix в разреженную матрицу Scipy:
from scipy.sparse import lil_matrix
def indexedrowmatrix_to_array(x):
output = lil_matrix((x.numRows(), x.numCols())
for indexed_row in x.rows.collect():
output[indexed_row.index] = indexed_row.vector
return output
и для CoordinateMatrix:
from scipy.sparse import dok_matrix
def coordinatematrix_to_array(x):
output = dok_matrix((x.numRows(), x.numCols())
for matrix_entry in x.entries.collect():
output[matrix_entry.i, matrix_entry.j] = matrix_entry.value
return output
Вы можете сделать что-то подобное для BlockMatrix, перебирая атрибут blocks и назначая его по частям, используя атрибуты rowsPerBlock и colsPerBlock.
@hpaulj ты прав, это должен быть dok_matrix. Я отредактировал ответ.
cooне выполняет индексацию.