【问题标题】:can't multiply matrix and list which type 'float'不能将矩阵相乘并列出“浮点”类型
【发布时间】:2016-06-02 09:42:28
【问题描述】:

我想将矩阵 (transpose_test_feature) 与列表 (log_train_probs_nonspam_words) 相乘。矩阵的大小为 (2500 * 260),列表的大小为 2500 个项目。我想将它们相乘。

但我有这种类型的错误:

TypeError: 不能将序列乘以“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.588463932107897, -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]

【问题讨论】:

  • 这是一个眼睛酸痛的景象......
  • 我已经减少了样本。我需要你的快速帮助@khajvah

标签: python list matrix floating-point multiplication


【解决方案1】:

您可以使用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

【讨论】:

  • 我已经尝试并得到这个错误; ValueError: 操作数不能与形状一起广播 (2500,) (2500,260) @MikeMüller
  • 更新了我的解决方案。
【解决方案2】:

您将列表乘以浮点数。您应该将矩阵的每一行与单词相乘。这样的事情会起作用。

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

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 2011-04-06
    • 2012-09-17
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多