Numpy Zeros不会将零分成数组

时间:2013-12-12 06:29:41

标签: python

编辑,最初我认为这是传递类的问题,但后来意识到这是因为当我做val = np.zeros((x,y))我不能为val [i]赋值,我发现原因是因为虽然文档http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html说>>>

np.zeros((2, 1))

返回

array([[ 0.],
       [ 0.]])

但是当我做的时候

ara = np.zeros((2,2))
print ara

我得到了

 [[ 0.  0.]
 [ 0.  0.]]

缺少','并且无法索引

我有一些带有一些初始化值的课程

class myclass():
    def __init__(self):
        self.stuffone = 0
        self.stufftwo = []

然后我有一些功能

def myfunc(stuff):
    getstuff = myclass()
    getstuff.stuffone = stuff[0]
    getstuff.stufftwo = [stuff[1],stuff[0]]

    return getstuff

val = np.zeros((1,3))
val[0] = myfunc(stuff)

所以我想调用myfunc,传递一些变量,然后它应该创建一个类实例并将它返回给我。到目前为止我看到的是myfunc内部,我打印getstuff并给出

<__main__.myclass instance at 0x000000000486CC08>

所以这对我有意义,但是,当我返回getstuff时,返回的值只是垃圾,我想

[  1.09268349e-317   1.09268349e-317   1.09268349e-317]

2 个答案:

答案 0 :(得分:2)

你不能使用numpy数组来存储像这样的类的实例。 看看文档!

=====
zeros
=====

Definition: zeros(shape, dtype=float, order='C')
Type: Function of numpy.core.multiarray module

[...]

Returns
-------
out : ndarray
    Array of zeros with the given shape, dtype, and order.

您创建的数组类型为float,而不是object类型。

尝试:

val = numpy.zeros((1,3),numpy.dtype(object))
val[0] = myfunc(stuff)
print val[0,0]

修改

请注意!

这有所不同:

>>> ara = np.zeros((2,2))
>>> ara
array([[ 0.,  0.],
       [ 0.,  0.]])
>>> print ara
[[ 0.  0.]
 [ 0.  0.]]

答案 1 :(得分:2)

np.zeros()没有错。您错过了逗号,因为您使用的是print ara,而不仅仅是ara,后跟输入。这使得Python打印出数组的“字符串”表示,与文档中显示的“repr”略有不同。此显示字符串不会影响数组的行为。

你的代码试图将任意“东西”放入一个numpy数组中。数组不是那样工作的,它们是键入的,只能接受正确类型的数据。 np.zeros((2, 2))返回float64的二维数组,因此您只能在其中放置浮点数。