2015-01-02 2 views
3

실행중인 프로그램의 중간에 숫자가 적은 행렬이 있습니다 (이름이 rdy이라고 가정 해 봅시다). 나는 이것을 1 차원 행렬로 재구성하여 2 차원 행렬을 얻는 것을 발견했습니다. 그러나 대화 형 셸에서 같은 것을 시도하면 예상되는 결과를 얻게됩니다. 다음 ipython 로그와 같습니다. 나는 매트릭스 재구성의 어떤면이 변형 될 때 다르게 행동하게 할까? np.matrix의 키 정의 속성Numpy reshape는 예기치 않게 작동합니다.

# This is expected: 
In [191]: np.random.rand(512, 1).reshape(-1).shape 
Out[191]: (512,) 

# This is unexpected: 
In [192]: rdy.reshape(-1).shape 
Out[192]: (1, 512) 

# The following are the different aspects of the rdy matrix: 
In [193]: rdy.shape 
Out[193]: (512, 1) 

In [194]: rdy.flags 
Out[194]: 
    C_CONTIGUOUS : True 
    F_CONTIGUOUS : False 
    OWNDATA : False 
    WRITEABLE : True 
    ALIGNED : True 
    UPDATEIFCOPY : False 

In [195]: rdy.data 
Out[195]: <read-write buffer for 0xeae6488, size 4096, offset 0 at 0x2ff95e70> 

답변

2

하나는 일반적인 변환을 통해 두 차원 객체로 남아 있다는 것이다. (결국 매트릭스의 거의 정의입니다.)

np.random.randnp.ndarray을 반환하며이 속성은이 속성을 공유하지 않습니다. (저는 ndarray를 C 배열과 매우 흡사하게 생각합니다. 여러분이 좋아하는 모든 차원을 변경할 수 있고, 같은 영역의 메모리를보고있는 한, 범위를 넘어서는 안된다는 것입니다. 모두 잘 될 것입니다.)

매트릭스가 배열로 작동하도록하려면 convert it to one 수 있습니다.

+0

고마워요, 네, 맞습니다. rdy는 드문 드문 한 행렬에서 발생합니다. 나는 그것이 ndarray와는 다른 유형을 제공한다는 것을 몰랐다. – shaoyl85

+1

'asparse.A' 또는'asparse.toarray()'를 사용하여 스파 스에서 배열을 생성하십시오. – hpaulj

관련 문제