我怎样才能将矩阵分解成特定的形状?
How can I factor matrices into specific shapes?
我有一个形状为 (30000, 10) 的矩阵。我想将其分解为形状为 (30000, 512) 和 (512, 10) 的矩阵。这可能吗?如果可以,我将如何在代码中这样做(最好是 python)?
例如,如果有这样一个矩阵:
c = np.array([[39, 21],
[87 , 54],
[135, 87],
[183, 120]])
我希望能够在指定形状时得到两个相乘得到 c
的矩阵。假设我想找到两个形状为 (4,3)
和 (3,2)
的矩阵,我会得到这些数组:
a = np.array([[1,2,3],
[4,5,6],
[7,8,9],
[10,11,12]])
b = np.array([[2,3],
[5,6],
[9,2]])
如果您的矩阵是非负的,您可以使用非负矩阵分解 (NMF) 来获得这样的解。可以参考sklearn's NMF implementation
示例:
import numpy as np
from sklearn.decomposition import NMF
x = np.random.rand(30000,10)
model = NMF(n_components=512, init='random', random_state=0)
W = model.fit_transform(x) # W.shape = (30000,512)
H = model.components_ # W.shape = (512,10)
我有一个形状为 (30000, 10) 的矩阵。我想将其分解为形状为 (30000, 512) 和 (512, 10) 的矩阵。这可能吗?如果可以,我将如何在代码中这样做(最好是 python)?
例如,如果有这样一个矩阵:
c = np.array([[39, 21],
[87 , 54],
[135, 87],
[183, 120]])
我希望能够在指定形状时得到两个相乘得到 c
的矩阵。假设我想找到两个形状为 (4,3)
和 (3,2)
的矩阵,我会得到这些数组:
a = np.array([[1,2,3],
[4,5,6],
[7,8,9],
[10,11,12]])
b = np.array([[2,3],
[5,6],
[9,2]])
如果您的矩阵是非负的,您可以使用非负矩阵分解 (NMF) 来获得这样的解。可以参考sklearn's NMF implementation
示例:
import numpy as np
from sklearn.decomposition import NMF
x = np.random.rand(30000,10)
model = NMF(n_components=512, init='random', random_state=0)
W = model.fit_transform(x) # W.shape = (30000,512)
H = model.components_ # W.shape = (512,10)