需要函数从部分积重建矩阵 E
Need function to re-construct matrix E from the partial product
任务是这样的:
假设具有低 FOV 的组件来自实验噪声。我们想消除这种噪声以获得更高的信噪比。为此,我们可以从部分积中重建矩阵 E
Ē = U(f) D(f) V^T(f),
其中下标 (f) 表示删除最后一列。完整的函数细化表达式,使用 SVD,select 只有那些一起解释至少 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 集成到我的原始函数中,有人可以帮我吗?
奇异值按降序排列,因此您需要做的就是沿着每个矩阵的 'inner' 维度索引第一个 f 值的切片:
# E is (M, N), U is (M, K), s is (K,) and Vt is (K, N), where K = min(M, N)
# f is an integer such that 0 < f < K
U, s, Vt = np.linalg.svd(E, full_matrices=False)
Fbar = U[:, :f].dot(np.diag(s[:f])).dot(Vt[:f, :])
注意np.linalg.svd
returns第二个酉矩阵V
是转置形式的,所以在计算点积之前不需要再次转置
任务是这样的:
假设具有低 FOV 的组件来自实验噪声。我们想消除这种噪声以获得更高的信噪比。为此,我们可以从部分积中重建矩阵 E Ē = U(f) D(f) V^T(f), 其中下标 (f) 表示删除最后一列。完整的函数细化表达式,使用 SVD,select 只有那些一起解释至少 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 集成到我的原始函数中,有人可以帮我吗?
奇异值按降序排列,因此您需要做的就是沿着每个矩阵的 'inner' 维度索引第一个 f 值的切片:
# E is (M, N), U is (M, K), s is (K,) and Vt is (K, N), where K = min(M, N)
# f is an integer such that 0 < f < K
U, s, Vt = np.linalg.svd(E, full_matrices=False)
Fbar = U[:, :f].dot(np.diag(s[:f])).dot(Vt[:f, :])
注意np.linalg.svd
returns第二个酉矩阵V
是转置形式的,所以在计算点积之前不需要再次转置