【问题标题】:Numpy gives "TypeError: can't multiply sequence by non-int of type 'float'"Numpy 给出“TypeError:不能将序列乘以‘float’类型的非整数”
【发布时间】:2018-05-31 01:38:20
【问题描述】:

有问题的部分是:

   self.H = np.multiply(self.H, np.divide(np.matmul(preprocessing.normalize(self.W).T, np.multiply(self.X, np.power(self.A, self.beta - 2)))), np.matmul(self.W.T, np.power(self.A, self.beta - 1)) + self.sparsity)

A、W、H 是 Panda 数据帧。 Beta 和稀疏度是整数。

它们的初始化是:

    self.W = pd.DataFrame(np.random.randint(100,size=(self.X.shape[0], self.K)))
    self.H = pd.DataFrame(np.random.randint(0,100,size=(self.K, self.X.shape[1])))
    self.W = preprocessing.normalize(self.W)
    self.A = self.W.dot(self.H)

【问题讨论】:

  • multiply 参数之一是一个列表。 [0]*3 产生 [0,0,0]`。
  • A、W、H、X的尺寸为(1055, 25) (1055, 30) (30, 25) (1055, 25)

标签: python numpy matrix scipy nmf


【解决方案1】:

Type Error: can't multiply sequence by non-int of type 'float' 的意思正是它所说的。您不能将非数字(非整数)数据类型与编号数据类型相乘。 例如,您不能将字符串与数字相乘。

您提交的上述代码实际上有效。但是,由于您收到此错误,我假设上面的代码只是您实际代码的代理。所以,我将讲述我是如何解决我在做类似事情时遇到的同样错误的。


假设有一个 csv 文件,其中包含下表所示类的主题标记

|      | Maths | English |
| Adam |  98   |   78    |
| John |  34   |   89    |

如您所见,有行索引和列索引。如果你跑

marks = pd.read_csv("marks.csv")

marks 将有 3 列,第一列包含学生的姓名。 Pandas read 假设第一列是数据的一部分。现在,如果你将它与Numpy 数组相乘,你会得到一个错误。因为,数字不能与字符串相乘。

为了解决这个问题,我们需要明确告诉 pandas 文件的第一列是行索引。

marks = pd.read_csv("marks.csv", index_col=0)

参数index_col 告诉文件中的哪一列作为行索引。 您可以在他们的文档here 中详细了解这一点。

【讨论】:

  • 非常感谢!这正是发生的事情
猜你喜欢
  • 1970-01-01
  • 2010-12-30
  • 2012-10-09
  • 1970-01-01
  • 2021-10-26
  • 2017-02-04
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多