任務是這樣的:需要函數從部分產品重構矩陣E
假設具有低FOV的分量來自實驗噪聲。我們希望消除這種噪音以實現更高的信噪比。爲了做到這一點,我們可以從部分產品E = U(f)D(f)V^T(f), 中重新構造矩陣E,其中下標(f)表示拒絕最後一列。完整的函數精化表達式,使用SVD,只選擇那些一起解釋至少90%方差的第一主成分,並用上面的公式重構矩陣E.
我嘗試了這樣的:
def refine_expression(F):
"""
Call:
Fbar = refine_expression(F)
Input argument:
F: numpy array (2-d matrix; centered)
Output arguments:
Fbar: numpy array (2-d matrix)
Example:
E,rn,cn = load_data('expressionSet1.dat')
F = transform(E)
Fbar = refine_expression(F)
=>
Fbar:
array([[ -0.26696566, 5.27928198, 0.03159005, ..., 0.65700363,
0.26819583, 0.1807512],
...
[ 0.24213939, -0.48004957, -1.2858063 , ..., -1.18645038,
-2.01918948, 1.34124707]])
Ebar.shape == E.shape % test for correctness
=>
True
"""
U,d,V = svd(E,full_matrices=False)
n = len(d)
Fbar = dot(dot(U[:,1:n],diag(d[1:n])),V[:,1:n].T)
return(Fbar)
但這是指到Ē= U(-1)d(-1)V^T(-1)。所以我不知道如何將f集成到我的原始功能中,有人能幫我解決嗎?
也許我的理解不正確,但是'n = len(d) - ...',那麼你減去你想刪除的列數? – EOL
另外,不要忘記,Python索引從0開始,而不是1 –