2017-02-09 3 views
-1

현재 모양 (33,)을 가진 요소 X가 있습니다. 각 행에 501 요소가 있다는 것을 알고 있으므로이 값을 (33, 501)로 변경하고 싶습니다. Fe. X[0] = [0, 1, 0, 0, .. 0, 1] 나는 ValueError: total size of new array must be unchangedPython - 개체 모양을 변경 하시겠습니까?

np.reshape(X, (33,501)) 

그러나 오류를 시도했습니다. 각 행의 길이는 501이지만

+2

'X' 어떤 "행"이없는 그 모양'(33)는이다'... 분명히 당신이 잘못된. –

+0

어떤 종류가'X'와'X [0]'입니까? 'X = np.array (X)' –

+0

'X.dtype'은'dtype ('O')'를 반환하고'X [0]'는리스트입니다. –

답변

1

시작하려는 구조는 2 차원 배열이 아니라 목록을 요소로 포함하는 1 차원 배열입니다. 비슷한 것처럼 보일 수도 있지만 실제로는 상당히 다릅니다.

일반적인 (예외가 있습니다.) m x n array는 numnpy가 올바른 방법으로 [i, j]와 같은 색인을 해석 할 수있게 해주는 일부 "메타 데이터"와 함께 mn 요소의 선형 블록입니다.

귀하의 배열은 객체 참조 (포인터가 C 언어로되어 있음)의 1 차원 블록이므로, 개별 요소를 해결하려는 경우 다른 간접 레벨이 추가됩니다. 먼저 목록을 검색 한 다음 요소를 검색합니다.

귀하의 배열은 편의성과 속도를 향상시키지 않으므로 적절한 배열을 제공하므로 변환하는 것이 가장 좋습니다.

일반적으로 np.array은 호환 가능한 길이의 중첩 된 시퀀스를 가능한 한 깊은 배열로 변환합니다. 엄밀히 말하자면, 이미 배열이기 때문에 귀하의 경우는 예외입니다. 따라서 np.array은 셰이프를 포함하여 그 자체를 얕게 복사합니다 (목록 참조 만 복사하지만 목록 자체는 복사하지 않습니다).

이를 우회하는 한 가지 방법은 변환하기 전에 목록에 캐스팅이다

:

np.array(list(original_array)) 
0

제 생각 엔 당신은 그 안에 길이가있는 33 개의 목록이있는 목록을 가지고 있습니다.

2 차원 배열 (행렬) 또는 데이터 프레임으로 변환 할 수 있습니다.이 방법은 여러 가지 방법으로 수행 할 수 있습니다. 간단한 것 :

df = pd.DataFrame([]) 

counter = 0 

for array in X: 

    df['column_%d' %counter] = array 

    counter = counter + 1