2016-07-27 5 views
2

가정하자 첫 번째 축을 따라 반복/복제하여 2 차원 배열에서 3 차원 배열을 만들기 n × m 배열, 즉 :내가 가진

array([[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]) 

그리고 나는 3D 배열 k × n × m를, 무엇을 생성하는 곳의 모든 배열 새 축이 동일합니다. 즉, 동일한 배열이지만 이제는 3 × 3 × 3입니다.

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

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

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

어떻게받을 수 있습니까?

답변

2

새 축의 시작 부분에 None/np.newaxis을 삽입하고 np.repeat과 함께 복제하십시오. 이는 n 어둡게 배열을 n+1 어둡게 배열로 확장하는 데 유용합니다. 구현 될 것이다 -

np.repeat(arr[None,...],k,axis=0) 

샘플 실행 -

In [143]: arr 
Out[143]: 
array([[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]) 

In [144]: np.repeat(arr[None,...],3,axis=0) 
Out[144]: 
array([[[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

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

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

당신이있는 경우 :

b = [a for x in range(3)] 
:

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

당신은 중복 배열을 생성하는 지능형리스트를 사용할 수 있습니다

다음 (numpy 용) :

c = array(b) 
0

하나의 가능성은 배열을 복제하는 기본 방송을 사용하는 것입니다 :

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

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

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

이 기본적 경우가 작동하지 않습니다 : 당신이 원하는 배열 결과

a = np.arange(1, 10).reshape(3,3) 
n = 3 
b = np.ones((n, 3, 3)) * a 

다른 축을 따라 복제하려고합니다. 이 경우 정확한 브로드 캐스팅을 위해 차원을 명시해야합니다.