python:如何确定多维数组是否为empy,以及值错误

python:如何确定多维数组是否为empy,以及值错误,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,我正在初始化一个数组,如下所示: import numpy as np g = np.array([no_classes, no_features, no_classes]) no_类和no_特征都是整数,假设它们分别等于2和3。因此,我打算制作g一个形状(2,3,2)的3D数组 稍后,我计算了一个名为temp\u g的二维数组,该数组具有以下形状:(no\u特性,no\u类) 现在,在一个循环中,如果g还没有被赋值,我想用temp\u g赋值jg的第th个元素,否则我想用简单的矩阵加法把te

我正在初始化一个数组,如下所示:

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

no_类
no_特征
都是整数,假设它们分别等于2和3。因此,我打算制作
g
一个形状(2,3,2)的3D数组

稍后,我计算了一个名为
temp\u g
的二维数组,该数组具有以下形状:(
no\u特性
no\u类

现在,在一个循环中,如果
g
还没有被赋值,我想用
temp\u g
赋值jg的第th个元素,否则我想用简单的矩阵加法把
temp\u 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 

我做错了什么?

在Python
中是检查对象标识,以便确定对象实际上是否相同

>>>a=[]
>>>a is []
False
>>>
因此,
g[j]是[]
从来都不是
True
。 按照建议,您可以检查
大小属性。

  • 如果两个对象相等,不要使用
    is
    进行比较,而是使用
    =
  • 您的
    g
    是一个1D numpy数组,
    g[j]
    为您获取一个元素,而
    curr\u g
    可能是一个数组。要重现错误,请执行以下操作:
  • 要检查
    g
    的子数组是否未分配(即,此处所有子数组均为0,IIUC),请使用
    np.allclose

次要注释:要检查g[j]是否包含数组,您可以使用
if len(g[j])
(适用于所有类型的数组)或
if g[j.any()
(适用于numpy数组),我尝试了
if len(g[j])==0
,但它给了我以下错误:
TypeError:type'numpy.int64'类型的对象没有len()
。当
g
是一个3D数组,所以
g[j]
应该是一个2D数组时,为什么要把
g[j]
作为一个单一值呢?
g
不是1D,我一开始就把它初始化为3D:
g=np.数组([no_类,no_特征,no_类])
,所以不应该
g[j]
是否是2D数组?@user961627是
无类
数字或列表/数组?
无类
无特征
都是简单整数。因此,如果它们分别等于2和3,那么我的意图是制作一个具有以下维度的3D数组:2x3x2。也许我初始化错了?谢谢!但是现在我如何检查它是否被赋值?我不能再使用
[]
,也不能测试
len(g[j])==0
,因为现在长度永远不会是0。。。使用
size
属性也存在同样的问题。那么,我如何测试它是否未赋值?
>>>a=[]
>>>a is []
False
>>>
In [110]: [] is []
Out[110]: False

In [111]: []==[]
Out[111]: True
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.
In [124]: np.zeros((2,3,2))
Out[124]: 
array([[[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]],

       [[ 0.,  0.],
        [ 0.,  0.],
        [ 0.,  0.]]])
In [128]: l=np.zeros((2,3,2))

In [129]: np.allclose(l[0], 0)
Out[129]: True