如何检查numpy数组是否已经存在?

o2g1uqev  于 11个月前  发布在  其他
关注(0)|答案(5)|浏览(113)

我想知道数组是否已经在代码中的某个地方定义了。像a.exist()这样的东西如果存在就给出True,如果不存在就给出False。
我尝试了a.size:,但是如果数组还不存在,它会给出一个错误消息,我想避免这个错误。
如果你想知道的话,要求这样做的情况发生在一个循环中。

fkvaft9z

fkvaft9z1#

你需要使用一个try/except块:

try:
    _ = a.shape
except NameError:
    print('a does not exist.')
except AttributeError:
    print('a does not have a shape property.')

正如@padraic指出的,这真的不应该发生在首位。最好初始化你的变量(例如:a = None),然后检查它们是否已设置(例如,if a: print('a is set') else: print('a has not been set')

u7up0aaq

u7up0aaq2#

Python有一些内置函数可以检查变量是否在当前/局部/全局范围内赋值。
例如,要检查变量是否在当前局部范围中定义,请使用:用途:

if 'a' in dir():
    # Variable a is defined.
    if hasattr(a, 'shape'):
        # Probably a numpy array, at least it has a shape.

但这不是好的python,try/except更常见,但为了完整起见,我认为值得一提的是,你可以不使用任何try/except。

if 'a' in dir():
    print('yes')
else:
    print('no')
# prints 'no' because we haven't defined any variable a

a = np.array([1,2,3])
if 'a' in dir():
    print('yes')
else:
    print('no')
# prints 'yes' because I defined it

del a
if 'a' in dir():
    print('yes')
else:
    print('no')
# prints 'no' because I deleted the variable again

另外值得一提的是localsglobals

z5btuh9x

z5btuh9x3#

如果你想确保a是一个numpy数组,而不是任何其他可能有size变量或方法的类型,你可以在try块中检查类型warped,以处理变量未定义时的异常。这样,只有当a存在并且是numpy数组时才继续。

import numpy as np
a = np.array([1,2])
try:
    if isinstance(b,np.ndarray):
        print("TRUE")
except NameError:
    print("FALSE")
8iwquhpp

8iwquhpp4#

使用try/except NameError Package 器是很好的Python。但是,事先将变量初始化为有用的东西也同样好。我不认为在速度上有太大的差异,但代码更具可读性。
举例来说:

for i in range(5):
    a += 4

将产生

NameError: name 'a' is not defined

可以用以下方法捕获:

for i in range(5):
    try:
        a += 4
    except NameError:
        a = np.arange(5)

但我可以更早地定义a。如果我事先不知道a的第一个值应该是什么,None是一个方便的值:

a=None
for i in range(5):
   if a is None:
       a=np.arange(5)
   a += 4

另一个常见的numpy实践是从一个空列表开始,并在那里累积值。

a = []
for i in range(5):
    a.append(np.ones(4)*i)
a = np.array(a)
rwqw0loc

rwqw0loc5#

短语“is not None”是确定数组存在或不存在的一个很好的概括。

if (a is not None):
    #Do something if it exists
else:
    #Do something if it does not exist

相关问题