任务是这样的:需要函数从部分产品重构矩阵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 –