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