Python:如何判断多维数组是否为空,以及值错误



我正在初始化一个数组,像这样:

import numpy as np
g = np.array([no_classes, no_features, no_classes])

no_classesno_features都是整数,假设它们分别等于2和3。所以我打算让g成为一个形状为(2,3,2)的3D数组。

之后,我计算了一个名为temp_g的二维数组,它的形状为:(no_features, no_classes)。

现在,在一个循环中,如果g还没有被赋值,我想把gj第一个元素赋值给temp_g,否则我想用简单的矩阵加法把temp_g加到它上面。

  if g[j] is []: #  <-- is this the correct way to determine if g is empty?
      g[j] = curr_g                          
  else:
      g[j] = g[j] + curr_g 

但是我得到这个错误:

ValueError: setting an array element with a sequence.

我做错了什么?

  • 如果两个对象相等,不要使用is来比较,使用==代替:
In [110]: [] is []
Out[110]: False
In [111]: []==[]
Out[111]: True
  • 你的g是一个1D numpy数组,g[j]给你一个元素,而curr_g可能是一个数组。复制错误:
In [117]: l=np.arange(3)
     ...: l[0]=[1,2] #assigning an element of a numpy array to as a python list
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-117-817e72d77bd0> in <module>()
      1 l=np.arange(3)
----> 2 l[0]=[1,2]
ValueError: setting an array element with a sequence.
  • np.array([no_classes, no_features, no_classes])给出了一个长度为3的1D数组。如果你想将g初始化为形状为(no_classes, no_features, no_classes)的3D数组,请使用np.zeros,例如:
In [124]: np.zeros((2,3,2))
Out[124]: 
array([[[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]],
       [[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]]])
  • 检查g的子数组是否未分配(即,这里都是0),使用np.allclose:
In [128]: l=np.zeros((2,3,2))
In [129]: np.allclose(l[0], 0)
Out[129]: True

在Python中,is检查对象的身份,因此是否两个对象实际上是相同的。

>>>a=[]
>>>a is []
False
>>>

所以g[j] is []不等于True。如这里所建议的,您可以检查size属性。

相关内容

  • 没有找到相关文章

最新更新