我搞不懂怎么利用卡雷的特质。为什么这个班
from traits.api import HasTraits, CArray, Float,Int
import numpy as np
class Coordinate3D(HasTraits):
coordinate = CArray(Float(), shape=(1,3) )
def _coordinate_default(self):
return np.array([1.,2.,3.])
显然没有使用我的\u name\u default()方法?你知道吗
In [152]: c=Coordinate3D()
In [153]: c.coordinate
Out[153]: np.array([[ 0., 0., 0.]])
我早就料到了np.数组([1,2,3])! \u name\u default()似乎与Int一起工作
class A(HasTraits):
a=Int
def _a_default(self):
return 2
In [163]: a=A()
In [164]: a.a
Out[164]: 2
我做错什么了?另外,我不能赋值:
In [181]: c.coordinate=[1,2,3]
TraitError: The 'coordinate' trait of a Coordinate3D instance must be an array of
float64 values with shape (1, 3), but a value of array([ 1., 2., 3.]) <type
'numpy.ndarray'> was specified.
与相同的错误消息
In [182]: c.coordinate=np.array([1,2,3])
骗我。从Eclipse复制粘贴到iPython时,我没有使用magic%paste函数,并且弄乱了那里的类定义。另一个实际的错误是CArray的形状,它必须是(3,)。你知道吗
此代码
工作方式如下:
一维数组和其中一个维度的大小为1的二维数组之间存在差异。您正在尝试将一维数组设置为
CArray
特性,该特性要求二维。例如,默认方法应为:(请注意额外的方括号)。您正在设置的数组的形状是
(3,)
,而不是所需的(1, 3)
。你知道吗类似地,它不会将平面列表强制为二维数组。尝试指定嵌套列表,如
相反。你知道吗
(或者,如果你真的想要一维数组,你应该在traits赋值中使用
shape=(3,)
,其他部分应该正常工作。)在前面答案的基础上,我做了进一步的实验:
这也很有效:
我想我把这个放在这里,因为我在网上找不到关于凯瑞的有用信息。你知道吗
相关问题 更多 >
编程相关推荐