2013-06-02 4 views
0

예 :Numpy, 2D 배열을 3D로 변환하는 방법 (cols를 2리스트로 그룹화 함)

array([[[0, 0], [0]], 
     [[0, 1], [1]], 
     [[1, 0], [1]], 
     [[1, 1], [0]]]) 

I는 ((예컨대 [0, 0, 0])으로 2 개 목록 행을 반복하고, 각 행을 슬라이싱하여 한 변환 후

array([[0, 0, 0], 
     [0, 1, 1], 
     [1, 0, 1], 
     [1, 1, 0]]) 

변환하기 전에 예를 들어 [ 0, 0], [0]]). 어떤 numpy 스타일의 단축키?

+0

를 두 번째 배열을 참고 더 이상 없다 'dtype = np.int' 당신이 고르지 않은 컬럼 크기를 가지고 있기 때문에'dtype = object'가됩니다. – jamylak

+0

@jamylak 네, 맞아요, 두 번째의 dtype은 객체입니다. 프로그램에서 오류없이 작동하지만, 나는 또한 dtype에 의아해합니다. 구조는 기본적으로 내가 원하는 것입니다 – bayesrule

+3

실제로 그런 개체가 필요하거나 대체 가능한 솔루션입니까? 예를 들어, 슬라이스 ('x'가 배열이라고 가정)를 살펴보십시오 :'x [:, 0 : 2], x [:, 2]' – Wolph

답변

1

당신은 멋진 NumPy와 인덱싱을 할 수있는 나는 가정 :

>>> a=np.arange(12).reshape(4,3) 
>>> a 
array([[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]]) 
>>> b=np.array([a[:,0:2].tolist(),a[:,2:3].tolist()]) 
>>> b 
array([[[0, 1], [3, 4], [6, 7], [9, 10]], 
     [[2], [5], [8], [11]]], dtype=object) 
>>> b[0][0][0],b[0][0][1],b[1][0][0] 
(0, 1, 2) 

.tolist()의 추가는 a의 사본을 만들 것입니다. a 그렇게되면

>>> b=np.array([a[:,0:2],a[:,2:3]]) 
>>> b 
array([[[0 1], [3 4], [6 7], [ 9 10]], 
     [[2], [5], [8], [11]]], dtype=object) 
>>> b[0][0][0],b[0][0][1],b[1][0][0] 
(0, 1, 2) 

그런 다음 b이 변경됩니다 : 당신이 a에 대한 참조 또는 뷰를 유지 b 내부의 객체를 원하는 경우

또는

>>> a[0][0]=23 
>>> a 
array([[23, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]]) 
>>> b 
array([[[23 1], [3 4], [6 7], [ 9 10]], 
     [[2], [5], [8], [11]]], dtype=object) 
>>> b[0][0].flags['OWNDATA'] 
False 
관련 문제