返回argmin方法的类型

时间:2014-03-21 07:23:44

标签: python numpy types

像往常一样,我对numpy数据类型感到很困惑。

假设我定义了一个numpy数组:

>>> a = np.array([1.,2.,3.])

代码中的某处我想知道a是否是一个numpy数组而不是其他类型的数据类型。以下提供了答案:

>>> print type(a) <type 'numpy.ndarray'>

我是在iPython中做到的。它似乎是&#34; type&#34;类型的对象。退回,但我真的不知道如何处理&#34;键入&#34;程序中的对象。我也可以使用isinstance来验证a是否是一个numpy数组:

>>> isinstance(a, np.ndarray) True

(旁边的问题:如何返回一个容易解释的对象来确定a是什么?文档说类型返回一个对象的类型,但是一种对象的类型是什么? #39;不是字符串或数字。它是某种对象。我似乎能够将类型对象转换为字符串,然后用split()解析它,但这似乎很危险。对于类型&#34;类型&#34;的对象是否有足够的文档,我可以保证当我将它传递给str时,我会得到一些我可以用标准方式解析的东西?)

回到主要问题。

我现在在a:

上使用argmin方法

>>> f = a.argmin()

我预计f的类型是整数,但不是。例如:

>>> type(3) int 给出&#34; int&#34;。但是f类型给出了:

>>> type(f) numpy.int32

我不知道numpy.int32告诉我的答案。它不是一个笨拙的阵列:

>>> isinstance(f, np.ndarray) False

但是f也不是整数。它是什么?这是相关的,因为我将这个numpy.int32对象传递给了一个函数,并且它创建了一个混乱。当我第一次转换为int,然后将其传递给函数时,一切正常。很明显,该函数需要一个int,但我传递了一个numpy.int32而得到了不好的结果。

argmin()方法的doc字符串表示它返回&#34; indices&#34;。我不确定是什么。我假设它是一个整数,或整数的numpy数组。但&#34;指数&#34;既不是。这是&#34; numpy.int32&#34;事情。那是什么?

感谢您的帮助。

(旁边讨论继续:我仍然寻找一个numpy函数或方法,它以一种易于解释的形式返回一个对象的类型.type返回一个类型为&#34的对象;键入&#34;,但我不会&#39; ;我知道如何编写一个查询类型对象的程序。我真的不知道类型对象是什么或者如何与它进行交互。拥有一个简单的numpy函数会很棒,并告诉我&#34;这是一系列花车&#34;或者#34;这是一个标量浮动&#34;或者#34;这是一个numpy.int32&#34;(不管是什么)。我还没有找到一种方法来做到这一点)。

1 个答案:

答案 0 :(得分:2)

您想要检查numpy ndarray的.dtype属性。如果你想让一个人来解释结果,那么np.int32之类的东西就意味着“numpy整数类型的32位”。如果你想以编程方式知道这个,那么最好的方法是使用np.typecodes

>>> np.typecodes
{'All': '?bhilqpBHILQPefdgFDGSUVOMm', 'Complex': 'FDG', 'AllFloat': 'efdgFDG',
 'Integer': 'bhilqp', 'UnsignedInteger': 'BHILQP', 'Float': 'efdg',
 'Character': 'c', 'Datetime': 'Mm', 'AllInteger': 'bBhHiIlLqQpP'}

每个代码都代表不同的类型:

>>> for t in np.typecodes['UnsignedInteger']:
...     print(np.dtype(t).name)
... 
uint8
uint16
uint32
uint32
uint64
uint64

请注意,如果np.dtype(...)是该类型的ndarray,则a.dtype的返回值与a返回的值相同。

最后,如果您只是想检查它是整数还是浮点数,您可以检查dtype的.kind属性,该属性也会返回一个字符:

>>> np.dtype(np.float32).kind
'f'
>>> np.dtype(np.int32).kind
'i'
>>> np.dtype(np.uint32).kind
'u'
>>> np.dtype(np.bool).kind
'b'

它有点复杂,所以它可能会让人感到困惑,但阅读the relevant part of the docs可能是一个好主意。