我有一个接受参数NBins
的函数。我想使用标量50
或数组[0, 10, 20, 30]
调用此函数。如何在函数中识别NBins
的长度?或者换一种说法,它是一个标量还是一个向量?
我试过这个:
>>> N=[2,3,5]
>>> P = 5
>>> len(N)
3
>>> len(P)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>>
如您所见,我不能对P
应用len
,因为它不是一个数组……在python中有像isarray
或isscalar
这样的东西吗?
谢谢
发布于 2013-11-05 01:32:06
前面的答案假设数组是一个python标准列表。作为经常使用numpy的人,我推荐一个非常严格的测试:
if hasattr(N, "__len__")
发布于 2015-03-04 23:32:13
将@jamylak和@jpaddison3的答案结合在一起,如果您需要健壮地将numpy数组作为输入,并以与列表相同的方式处理它们,那么您应该使用
import numpy as np
isinstance(P, (list, tuple, np.ndarray))
这对于list,tuple和numpy数组的子类是健壮的。
如果您还想对sequence的所有其他子类(不仅仅是列表和元组)保持健壮,请使用
import collections
import numpy as np
isinstance(P, (collections.Sequence, np.ndarray))
为什么要用isinstance
这样做,而不是将type(P)
与目标值进行比较?这里有一个例子,我们制作并研究了NewList
的行为,list的一个无关紧要的子类。
>>> class NewList(list):
... isThisAList = '???'
...
>>> x = NewList([0,1])
>>> y = list([0,1])
>>> print x
[0, 1]
>>> print y
[0, 1]
>>> x==y
True
>>> type(x)
<class '__main__.NewList'>
>>> type(x) is list
False
>>> type(y) is list
True
>>> type(x).__name__
'NewList'
>>> isinstance(x, list)
True
尽管将x
和y
相提并论,但type
对它们的处理会导致不同的行为。但是,由于x
是list
子类的一个实例,因此使用isinstance(x,list)
可以提供所需的行为,并以相同的方式处理x
和y
。
发布于 2015-11-13 12:53:17
numpy中是否有等效于isscalar()的函数?是。
>>> np.isscalar(3.1)
True
>>> np.isscalar([3.1])
False
>>> np.isscalar(False)
True
>>> np.isscalar('abcd')
True
https://stackoverflow.com/questions/16807011
复制相似问题