我想从以下公式中获得一个列表(或数组,无所谓):
A_i = X_(k!=i) * S_(k!=i) * X'_(k!=i)
其中:
X是向量(X'是X的转置),S是矩阵,下标k被定义为{k=1,2,3,…n | k=i} 是的
X = [x1, x2, ..., xn]
S = [[s11,s12,...,s1n],
[s21,s22,...,s2n]
[... ... ... ..]
[sn1,sn2,...,snn]]
我以以下为例:
X = [0.1,0.2,0.3,0.5]
S = [[0.4,0.1,0.3,0.5],
[2,1.5,2.4,0.6]
[0.4,0.1,0.3,0.5]
[2,1.5,2.4,0.6]]
所以,最终,我会得到a的四个值的列表
我做到了:
import numpy as np
x = np.array([0.1,0.2,0.3,0.5])
s = np.matrix([[0.4,0.1,0.3,0.5],[1,2,1.5,2.4,0.6],[0.4,0.1,0.3,0.5],[1,2,1.5,2.4,0.6]])
for k in range(x) if k!=i
A = (x.dot(s)).dot(np.transpose(x))
print (A)
我对如何使用条件“for”循环感到困惑。你能帮我解决这个问题吗?谢谢
编辑: 只是为了解释更多。如果取i=1,则公式为:
A_1 = X_(k!=1) * S_(k!=1) * X'_(k!=1)
因此,与下标1关联的任何数组(或值)都将在X和S中删除。比如:
X = [0.2,0.3,0.5]
S = [[1.5,2.4,0.6]
[0.1,0.3,0.5]
[1.5,2.4,0.6]]
第1步:正确计算
第二步:收集到一个
我想你要计算的是
一个简单的方法是使用屏蔽数组屏蔽条目。这样我们就不需要删除或复制任何矩阵
由于
0
的项不会加到和中,我们实际上可以忽略屏蔽矩阵,而只屏蔽向量:最后一步是将
A
从A_i
中组装出来,所以我们总共得到在Python中,使用循环实现矩阵/向量积将相当缓慢。因此,我建议实际删除给定索引处的行/列/元素,并在没有任何显式循环的情况下执行快速的内置点积:
相关问题 更多 >
编程相关推荐