3

我有两个不同类型的数组。

>>> type(pred)
<type 'numpy.ndarray'>
>>> type(label1)
<type 'tuple'>

将它们转换为 np.ndarray

>>> nl = np.array(label1)
>>> npred = np.array(pred)
>>> type(nl)
<type 'numpy.ndarray'>
>>> type(npred)
<type 'numpy.ndarray'>
>>> nl.shape
(189,)
>>> npred.shape
(189,)

如您所见,这两个变量实际上是相同的类型和维度nlnpred

但是,当我尝试减去它们时,会发生错误。

>>> nl - npred
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray'

这很奇怪,不是吗?

4

1 回答 1

4

您遇到的问题是,尽管nlnprednumpy.ndarray对象,但它们可以包含异构数据。见文档numpy.dtype

numpy 数组是同质的,并且包含由 dtype 对象描述的元素。dtype 对象可以由基本数字类型的不同组合构成。

所以如果n1是一个字符串数组和npred一个整数数组,你就不能执行加法操作:

>>> import numpy as np
>>> a = np.array(['a', 'b', 'c'])
>>> b = np.array([1, 2, 3])
>>> type(a), type(b)
 (numpy.ndarray, numpy.ndarray)
>>> a + b
 unsupported operand type(s) for +: 'numpy.ndarray' and 'numpy.ndarray

如果您想知道数组的内容类型:

>>> a.dtype, b.dtype
 (dtype('S1'), dtype('int64'))

因此,您必须知道哪个数据类型包含每个数组。这不是尺寸问题。

于 2013-11-13T14:29:03.250 回答