2017-12-18 13 views
0

내 데이터는 3D이지만 제 3 축에만 알려진 치수가 있으며 2D 배열로 변환해야합니다.이질 차원에서 2D numpy 배열로 변형 된 numpy 배열

예 :

input = 
[[[1, 2, 3]], 

[[4, 5, 6], 
    [7, 8, 9]], 

[[1, 2, 3], 
    [4, 5, 6], 
    [7, 8, 9]]] 

input_reshaped = 
[[1, 2, 3], 
[4, 5, 6], 
[7, 8, 9], 
[1, 2, 3], 
[4, 5, 6], 
[7, 8, 9]] 

그래서 I는 상기 제 1 및 제 2 측정 데이터 세트 내 따라 가변적 세번째 상수 이전 본적도 된 3D 데이터를 갖는다.

입력의 모든 블록도 numpy 배열입니다. numpy.vstack을 사용하고 첫 번째 차원을 반복하여 수행 할 수 있음을 알고 있습니다. 그러나 가능한 경우 내 데이터를 반복적으로 반복하지 않고 파이썬 방법으로이 모양을 만들고 싶습니다.

이미 목록 compehension을 수행하여 각 블록의 첫 번째 모양을 얻은 다음이 값을 합산하고 reshape와 함께 사용하려고했습니다. 이처럼 :

def myStack(a): 
    lengths = [item.shape[0] for item in a] 
    common_dim = a[0].shape[1] 
    return a.reshape(np.sum(lengths), common_dim) 

그러나 입력이

이전 예제에서, 나는 다음과 같은 오류가 발생합니다 : 입력을 볼 수 파이썬 모양 (3)

와 numy.array을 가지고

ValueError: cannot reshape array of size 3 into shape (6,3) 

때문에

아이디어가 있으십니까?

추가 사항 : 가능한 경우 위의 조건에서 역변환을하면 정말 좋을 것입니다! 코멘트에서 권장

+1

'np.concatenate (inp axis = 0)'는 어떻습니까? –

+0

무엇을 ** ** 정확하게 ** 함께 작업하고 있습니까? 귀하의 예제'input' 배열은 * 배열이 아니며'list' 객체입니다. 실제 배열의 예를 들어주세요. 참고, 배열은 "3D"라고 말하지만 배열 생성자를'input' 데이터에 사용하면 1 차원 배열을 반환합니다 ... –

+0

흠, 나는 선택의 여지가 없다고 생각하지만' np.vstack'. 또는 배열의리스트에'np.concatenate '. –

답변

1

, vstack 또는 concatenate :

In [320]: alist 
Out[320]: [[[1, 2, 3]], [[4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]]] 
In [321]: len(alist) 
Out[321]: 3 

목록에서 배열을 만들려고 노력은리스트의 1 차원 배열을 만듭니다. 별로 도움이 안돼. reshape이 작동하지 않습니다. (객체와 같은 또는 배열)를 배열의 목록

In [322]: np.array(alist) 
Out[322]: 
array([list([[1, 2, 3]]), list([[4, 5, 6], [7, 8, 9]]), 
     list([[1, 2, 3], [4, 5, 6], [7, 8, 9]])], dtype=object) 

그러나 concatenate 작품 :이 목록으로 입력을 취급하기 때문에

In [323]: np.concatenate(alist, axis=0) 
Out[323]: 
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9], 
     [1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]) 

concatenate

Out[322] 함께 작동합니다 심지어는 배열입니다.

vstack은 하위 배열이 모두 2d인지 확인하는 것을 제외하고는 똑같습니다.이 경우에는 이미 존재합니다.

+0

내 문제를 해결합니다. 감사! 그러나 역 과정을 수행 할 수 있습니까? 왜냐하면 나는 sklearn의 전처리 모듈로 데이터를 "표준화"하고 있기 때문에 데이터를 다시 써야 할 필요가 있기 때문이다 ... –

+0

'np.split' (및 변형)은 배열을 배열 목록으로 나눌 수있다. 아니면 자신 만의 목록 이해력을 사용하십시오. – hpaulj