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

时间:2016-02-21 20:26:20

标签: python arrays numpy

我想知道代码之前是否已在某处定义过数组。 像a.exist()这样的东西如果存在则给出True,如果不存在则给出False。

我尝试了a.size:,但如果数组尚未存在,则会显示错误消息,我想避免这种消息。

如果你想知道的话,要求这种情况发生在一个循环中。

4 个答案:

答案 0 :(得分:5)

您需要使用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')

答案 1 :(得分:1)

如果您想确保anumpy数组而不是任何其他可能包含size变量或方法的类型,您可以检查变形类型如果未定义变量,请尝试使用块来处理异常。这样,只有当a存在并且是numpy数组时才会继续。

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

答案 2 :(得分:1)

Python有一些内置函数,如果在当前/本地/全局范围内分配变量,则可以使用它。

例如,检查当前本地scopy使用中是否定义了变量:

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更常见但是为了完整性,我认为值得一提的是你可以不用任何尝试/除外。

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

答案 3 :(得分:0)

使用try/except NameError包装器是很好的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。如果我事先不知道None的第一个值应该是什么,那么a是一个方便的价值:

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)