首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python:如何识别变量是数组还是标量

python:如何识别变量是数组还是标量
EN

Stack Overflow用户
提问于 2013-05-29 14:33:42
回答 11查看 423.3K关注 0票数 363

我有一个接受参数NBins的函数。我想使用标量50或数组[0, 10, 20, 30]调用此函数。如何在函数中识别NBins的长度?或者换一种说法,它是一个标量还是一个向量?

我试过这个:

代码语言:javascript
复制
>>> 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中有像isarrayisscalar这样的东西吗?

谢谢

EN

回答 11

Stack Overflow用户

发布于 2013-11-05 01:32:06

前面的答案假设数组是一个python标准列表。作为经常使用numpy的人,我推荐一个非常严格的测试:

代码语言:javascript
复制
if hasattr(N, "__len__")
票数 144
EN

Stack Overflow用户

发布于 2015-03-04 23:32:13

将@jamylak和@jpaddison3的答案结合在一起,如果您需要健壮地将numpy数组作为输入,并以与列表相同的方式处理它们,那么您应该使用

代码语言:javascript
复制
import numpy as np
isinstance(P, (list, tuple, np.ndarray))

这对于list,tuple和numpy数组的子类是健壮的。

如果您还想对sequence的所有其他子类(不仅仅是列表和元组)保持健壮,请使用

代码语言:javascript
复制
import collections
import numpy as np
isinstance(P, (collections.Sequence, np.ndarray))

为什么要用isinstance这样做,而不是将type(P)与目标值进行比较?这里有一个例子,我们制作并研究了NewList的行为,list的一个无关紧要的子类。

代码语言:javascript
复制
>>> 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

尽管将xy相提并论,但type对它们的处理会导致不同的行为。但是,由于xlist子类的一个实例,因此使用isinstance(x,list)可以提供所需的行为,并以相同的方式处理xy

票数 65
EN

Stack Overflow用户

发布于 2015-11-13 12:53:17

numpy中是否有等效于isscalar()的函数?是。

代码语言:javascript
复制
>>> np.isscalar(3.1)
True
>>> np.isscalar([3.1])
False
>>> np.isscalar(False)
True
>>> np.isscalar('abcd')
True
票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16807011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档