2016-02-20 57 views
-6

我想將矩陣(transpose_test_feature)與列表(log_train_probs_nonspam_words)相乘。矩陣的大小爲(2500 * 260),列表的大小爲2500個項目。我想把它們相乘。不能乘以矩陣並列出哪種類型'float'

但我有這種類型的錯誤:

TypeError: can't multiply sequence by non-int of type 'float'

是否有任何人誰可以迅速幫助我嗎?


multiply_nonspam_test = [] 
for i in range(0, len(transpose_test_feature)): 
     x = log_train_probs_nonspam_words[i] *transpose_test_feature[i] 
     multiply_nonspam_test.append(x) 

print multiply_nonspam_test 

輸入:

log_train_probs_nonspam_words(樣品):

[-5.259440519499674, -5.5014525551182665, -6.226860597896433, -4.000908730923304, -6.970438632083271, -6.082121752251521, -6.7823864005803305, -4.22184233658671, -5.805134968916488, -6.28594951426644, -5.396092039460441, -4.935057080197465, -6.321351441317356, -6.054147900209116, -7.698677132454486, -6.71339352909338, -5.403260528939053, -5.454932539483374, -5.837924791739479, -9.239122173401634, -6.405908829345418, -8.83365706529347, -6.9200077784563785, -5.406864136442351, -6.089239220020385, -5.794439679799741, -5.6556032349455245, -7.8528278122817445, -4.863365151741348, -7.3673199965000435, -5.7897, -7.293212024346322, -6.509093065580649, -5.605931625148287, -4.93280736046345, -6.674172815940098, -7.663585812643216, -5.918893854273146, -6.7542155236136345, -7.534374081163209, -6.6241623953654365, -5.095987447010102, -8.140509884733525, -6.2350910970329485, -5.287878454820207] 

transpose_test_feature(最初它是一個2500 * 260矩陣,我給一矩陣的第一列):

[0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 3, 1, 0, 2, 3, 0, 0, 2, 2, 0, 5, 1, 3, 0, 0, 3, 3, 0, 0, 1, 0, 1, 1, 1, 3, 0, 0, 3, 4, 1, 8, 0, 0, 0, 1, 3, 2, 0, 2, 2, 0, 0, 0, 1, 2, 0, 3, 2, 1, 0, 0, 1, 0, 3, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 2, 1, 1, 0, 18, 0, 10, 13, 3, 0, 2, 1, 7, 7, 0, 11, 8, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 9, 0, 4, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 42, 11, 5, 0, 19, 3, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 5, 3, 1, 8, 0, 0, 2, 3, 14, 0, 2, 0, 13, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 2, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0] 
+5

*仍然滾動* – khajvah

+0

這是一個讓人感到心曠神怡...... –

+0

我已經減少了樣品。我需要你的快速幫助plss @khajvah – serenade

回答

0

你將一個列表乘以一個浮點數。你應該用矩陣乘以矩陣的每一行。像這樣的東西會奏效。

multiply_nonspam_test = [] 
for row in transpose_test_feature: 
    multiply_nonspam_test.append([x*y for x,y in zip(row, log_train_probs_nonspam_words)]) 

print multiply_nonspam_test 
+0

謝謝! @helloV – serenade

0

您可以使用NumPy加快速度:

import numpy as np 

a1 = np.array(log_train_probs_nonspam_words) 
a1 = a1.reshape(a1.shape[0], 1) 
a2 = np.array(transpose_test_feature) 

multiply_nonspam_test = a1 * a2 
+0

我試過並得到這個錯誤; ValueError:操作數無法與形狀一起廣播(2500,)(2500,260)@MikeMüller – serenade

+0

更新了我的解決方案。 –