2016-12-09 34 views
0

我試圖讓向量的加權總和(VECT的尺寸是可變的),以數據爲:未知維度的矢量加權和

vect[1] = [5., 6., 7.] mult[1][1] = "20" 
vect[2] = [7., 8., 9.] mult[2][1] = "80" 
...... 

我所尋找的是:

\sum(vect[i]*float(mult[i][1])) 

但是,我無法得到。

對於一個具體的例子:

print(vect) 
for i in range(2): 
    print(mult[i][1]) 
lat_alloy = [3] 
for i in range(len(m)): 
    nvect[i] = vect[i]*float(mult[i][1]) 
lat_alloy[1] = sum(item[1] for item in nvect) 
lat_alloy[2] = sum(item[2] for item in nvect) 
lat_alloy[3] = sum(item[3] for item in nvect) 
print(lat_alloy) 

,我很早就與失敗:

[[286.65, 286.65, 286.65], [250.71, 250.71, 406.95]] 
20 
80 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/site-packages/ptbl/veggards.py", line 68, in entry_text 
    nvect[i] = vect[i]*float(mult[i][1]) 
TypeError: can't multiply sequence by non-int of type 'float' 

我想獲得的是:

[286.65, 286.65, 286.65]*20 
    +  +  + 
[250.71, 250.71, 406.95]*80 

請幫助。

+0

你可以寫一個[最小的,完整的和可覈查的示例](https://stackoverflow.com/help/mcve)SH由於你需要什麼?很難從這個角度看出什麼答案就足夠了,因爲我不知道'nvect'是什麼,或者你爲什麼不得不使用'mult [i] [1]',或者什麼'm' ... – Useless

回答

1

因爲我有問題,你的一些代碼的其他部分,我改變了其他部分,以及:

# These were my inputs 
vect = [[286.65, 286.65, 286.65], [250.71, 250.71, 406.95]] 
mult = [[0,20],[0,80]] 

lat_alloy = [] 
for i in range(len(vect)): 
    lat_alloy.append([j * float(mult[i][1]) for j in vect[i]]) 

results = [] 
for i in range(len(lat_alloy[0])): 
    results.append(sum([j[i] for j in lat_alloy])) 
print(results) 

或者,如果你想要一些非常簡潔,但目前還不清楚代碼:

lat_alloy = [([j * float(mult[i][1]) for j in vect[i]]) for i in range(len(vect))] 
results = [(sum([j[i] for j in lat_alloy])) for i in range(len(lat_alloy[0]))] 
print(results) 

兩個輸出:

20 
80 
[25789.8, 25789.8, 38289.0] 
+0

你的精心製作的解決方案更好......接受以供進一步參考 – BaRud