首页 > 解决方案 > 如何检查 numpy.array 是否存在?numpy数组的真值测试值?

问题描述

在开发一个使用 的类时numpy.array,我想在一个阶段构造这个数组,然后检查它是否存在以便操作它,或者在稍后的阶段构造它(下面的伪代码)。我如何检查这个数组是否存在?

对于任何基本对象,我使用 :if my_object: # do something它使用真值测试,但对于numpy值测试检查数组的任何或所有元素是否存在,因此if my_array: # do something给出错误The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

目前,唯一可行的转机是调用isinstance(my_array,numpy.ndarray),但我认为这不是很方便(尤其是因为一些库,例如sklearn可以将 numpy 数组转换为scipy.sparse对象)。

说明我想做的伪代码:


def compute_my_array(self, ...):
   # long job here
   return my_array

def new_computation(self, my_array = None, ...):
   if not my_array: # if my_array does not exist, compute it ...
      my_array = compute_my_array(self, ...)
   do_something_else_with_my_array(my_array) # ... otherwise use it

目前我发现检查是否存在的唯一方法my_array是使用

   if not isinstance(my_array, numpy.ndarray):
      my_array = compute_my_array(my_array)

有没有其他(也许更好)的方法来做这个检查?

标签: pythonnumpyscipyisinstance

解决方案


只需更改默认值以返回一个空数组,然后检查数组中是否有任何内容

def new_computation(self, my_array = np.zeros((1,)), ...):
   if not my_array.any(): # if my_array has no nonzero data, compute it ...
      my_array = compute_my_array(self, ...)
   do_something_else_with_my_array(my_array) # ... otherwise use it

推荐阅读