Восстановите Матрицу из компонентов SVD с помощью Pyspark

Вы можете использовать опцию -Xlinker.

g++ -o foobar  -Xlinker -start-group  -Xlinker libA.a -Xlinker libB.a -Xlinker libC.a  -Xlinker -end-group 

ALMOST равно

g++ -o foobar  -Xlinker -start-group  -Xlinker libC.a -Xlinker libB.a -Xlinker libA.a  -Xlinker -end-group 

Осторожно!

  1. Порядок в группе важен! Вот пример: библиотека отладки имеет процедуру отладки, но библиотека без отладки имеет слабую версию. Вы должны поместить библиотеку отладки FIRST в группу или вы решите на не-отладочную версию.
  2. Вам нужно перед каждой библиотекой в ​​списке групп с -Xlinker
-1
задан arijit 2 March 2019 в 09:11
поделиться

1 ответ

Преобразовать u в диагональную матрицу Σ:

import numpy as np
from pyspark.mllib.linalg import DenseMatrix

Σ = DenseMatrix(len(s), len(s), np.diag(s).ravel("F"))

Транспонировать V, преобразовать в основной столбец и затем преобразовать обратно в [ 1110]

V_ = DenseMatrix(V.numCols, V.numRows, V.toArray().transpose().ravel("F"))

Умножить :

mat_ = U.multiply(Σ).multiply(V_) 

Проверить результаты:

for row in mat_.rows.take(3): 
    print(row.round(12)) 
[0. 1. 0. 7. 0.]
[2. 0. 3. 4. 5.]
[4. 0. 0. 6. 7.]

Проверить норму

np.linalg.norm(np.array(rows.collect()) - np.array(mat_.rows.collect())
1.2222842061189339e-14

Конечно, последние два шага используются только для тестирования и не будут осуществимы на реальных данных.

0
ответ дан user10938362 2 March 2019 в 09:11
поделиться