我正在初始化一个数组,像这样:
import numpy as np
g = np.array([no_classes, no_features, no_classes])
no_classes
和no_features
都是整数,假设它们分别等于2和3。所以我打算让g
成为一个形状为(2,3,2)的3D数组。
之后,我计算了一个名为temp_g
的二维数组,它的形状为:(no_features
, no_classes
)。
现在,在一个循环中,如果g
还没有被赋值,我想把g
的j第一个元素赋值给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
属性。