Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
numpy.asarray在cython memoryview中失败_Numpy_Cython_Memoryview - Fatal编程技术网

numpy.asarray在cython memoryview中失败

numpy.asarray在cython memoryview中失败,numpy,cython,memoryview,Numpy,Cython,Memoryview,我在使用numpy.asarray和memoryview对象时遇到了一些奇怪的行为,我无法解释。下面是一个在jupyter笔记本中使用cython魔法的简单示例——我只需创建一个函数,该函数需要两个结构数组缓冲区并返回它们。一个有两个整数,另一个有一个长整数和一个整数: cdef struct S1: int iGroup int iOrder cdef struct S2: long iGroup int iOrder def test_struct(S1[

我在使用numpy.asarray和memoryview对象时遇到了一些奇怪的行为,我无法解释。下面是一个在jupyter笔记本中使用cython魔法的简单示例——我只需创建一个函数,该函数需要两个结构数组缓冲区并返回它们。一个有两个整数,另一个有一个长整数和一个整数:

cdef struct S1:
    int iGroup
    int iOrder

cdef struct S2:
    long iGroup
    int iOrder

def test_struct(S1[:] s1, S2[:] s2):
    return s1, s2
现在,我用python制作了两个数组来传递给这个函数:

dt1 = np.dtype([('iGroup', 'i4'), ('iOrder', 'i4')], align=True)
dt2 = np.dtype([('iGroup', 'i8'), ('iOrder', 'i4')], align=True)

a = np.zeros(10, dtype=dt1)
b = np.zeros(10, dtype=dt2)

x, y = test_struct(a,b)

print x
print y

<MemoryView of 'ndarray' object>
<MemoryView of 'ndarray' object>
dt1=np.dtype([('iGroup','i4'),('iOrder','i4')],align=True)
dt2=np.dtype([('iGroup','i8'),('iOrder','i4')],align=True)
a=np.0(10,dtype=dt1)
b=np.0(10,dtype=dt2)
x、 y=测试结构(a,b)
打印x
打印y
两者都作为MemoryView对象成功返回。现在我想把它们变成一个numpy数组:

np.asarray(x)

array([(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0),
       (0, 0), (0, 0)], 
      dtype=[('iGroup', '<i4'), ('iOrder', '<i4')])


np.asarray(y)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-204-ca5459515bfd> in <module>()
----> 1 np.asarray(y)

/Users/rok/miniconda/lib/python2.7/site-packages/numpy/core/numeric.pyc in asarray(a, dtype, order)
    480 
    481     """
--> 482     return array(a, dtype, copy=False, order=order)
    483 
    484 def asanyarray(a, dtype=None, order=None):

TypeError: expected a readable buffer object
np.asarray(x)
数组([(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
(0, 0), (0, 0)], 

dtype=[('iGroup','您是否尝试过将结构定义为
cdef-packed-struct
?感谢@DavidW的建议,似乎可以解决这个问题——但为什么?我不是100%确定。它的文档似乎相对较差。这里有一些旧文档,但当前文档中似乎缺少了它,请参阅(
align
).Right…我使用的是
aligned=True
,因为我在打包结构的其他地方遇到了问题。错误(应为可读的缓冲区对象)似乎很神秘。您是否尝试过将结构定义为
cdef-packed-struct
?感谢@DavidW的建议,似乎可以解决这个问题——但原因是什么?我不是100%确定。它的文档记录似乎相对较差。这里有一些旧文档,但当前文档中似乎缺少它,请参阅(
align
).对…我使用的是
aligned=True
,因为我在其他地方遇到了打包结构的问题。错误(应该是可读的缓冲区对象)看起来非常神秘。