2014-10-21 3 views
1

업데이트 : numpy bug.Numpy bug? 어떻게 numpy 레코드 배열 ("재 배열")을 정렬합니까?


불행하게도 다음

import numpy as np 
a = np.zeros(4, dtype=np.dtype([('t', '<f8'), ('d', [('a', '<i4'), ('b', '<f8')], (100,))], align=True)) 
b = np.require(a, requirements=['ALIGNED']) 
print([x.flags['ALIGNED'] for x in [a, b]]) 

인쇄 [False, False]!

어떻게 a을 정렬합니까?

+0

내가 잘못하면 나를 바로 잡으십시오! "b.flags [ 'ALIGNED']"라고 인쇄하면 False가 표시됩니까? (왜냐하면이 코드를 실행할 때 True 값을 얻습니다.) – user3378649

+0

@ user3378649 : 1.31의 수치가 틀립니다. (나는 그것을 의심 할 여지가 없도록 프로그램으로 썼다.) –

+0

@ user3378649 : 아마''

답변

4

dtype에 정렬 요구 사항을 지정할 수 있습니다.

In [9]: a = np.zeros(4, dtype= np.dtype([('x', '<f8'), ('y', '<i4')], align=False)) 

In [10]: a.data 
Out[10]: <read-write buffer for 0x2f94440, size 48, offset 0 at 0x2f8caf0> 

In [11]: a = np.zeros(4, dtype=np.dtype([('x', '<f8'), ('y', '<i4')], align=True)) 
In [12]: a.data 
Out[12]: <read-write buffer for 0x2f94030, size 64, offset 0 at 0x2f8c5b0> 

크기가 다르다는 점에 유의하십시오. 구조화 된 유형의 경우 이전 버전의 Numpy에서 정렬 플래그가 오도 된 것이므로 SPARC에서 올바르게 작동하게하려면 문자열 및 구조화 된 유형의 경우 16 바이트가 필요합니다. Julian Taylor가 더 자세한 설명을합니다 http://article.gmane.org/gmane.comp.python.numeric.general/59123

+0

답변 해 주셔서 감사합니다. 이 간단한 테스트 케이스와 함께 작동하는 동안. 불행히도 일반적으로 작동하지 않습니다. 내 업데이트 된 질문을 참조하십시오. –

+1

OK, 버그처럼 보입니다. 'recarray' 클래스는 정렬 된 매개 변수를 받아들이지 만'format_parser'에서 잃어 버릴 것입니다. 대화중의 문제를 열면 대화를 옮길 수 있습니다. –

+1

고마워, 좋아. 내 질문에 대한 동기를 본 적이 있다면 알려 주시기 바랍니다 : http://stackoverflow.com/questions/26484665/opengl-says-from-param-received-a-non-contiguous-array이 버그는 내가 생각하는 PyOpenGL을 깨고있다. . –