假设我定义了一个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;(不管是什么)。我还没有找到一种方法来做到这一点)。
答案 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可能是一个好主意。