2013-02-26 2 views
4

공통 인덱스가있는 여러 크기의 배열이 있습니다. 예를 들어 Python, Numpy, 배열을 다차원으로 함께 추가하는 방법 (브로드 캐스팅)

,

Arr1 = np.arange(0, 1000, 1).reshape(100, 10) 
Arr2 = np.arange(0, 500, 1).reshape(100,5) 

Arr1.shape = (100, 10) 
Arr2.shape = (100, 5) 

나는 차원 셋 인 새로운 배열, Arr3에 함께 다음을 추가합니다. 예 :

Arr3 = Arr1 + Arr2 
Arr3.shape = (100, 10, 5) 

참고로,이 경우 값은 예를 들어.

Arr3[10, 3, 2] = Arr1[10, 3] + Arr2[10, 2] 

나는

test = Arr1.copy() 
test = test[:, np.newaxis] + Arr2 

지금, 나는 두 개의 정사각형 행렬을 추가 할 때이 작업을 할 수있었습니다 다음과 같은 방법을 사용하려고 시도하고있다.

m = np.arange(0, 100, 1) 
[x, y] = np.meshgrid(x, y) 
x.shape = (100, 100) 

test44 = x.copy() 
test44 = test44[:, np.newaxis] + x 
test44.shape = (100, 100, 100) 
test44[4, 3, 2] = 4 
x[4, 2] = 2 
x[3, 2] = 2 

그러나 실제 프로그램에서는이 문제에 대해 정사각형 행렬을 사용하지 않습니다. 또한이 방법은 다음과 같이 차원 수를 위로 이동하기 시작할 때 입증되는 것처럼 매우 메모리 집약적입니다. 축 "공유"

  1. 은 일반적인 두 개의 다른 모양의 2 차원 배열에서 3 차원 배열을 만들 수 있습니다 :

    test44 = test44[:, :, np.newaxis] + x 
    test44.shape = (100, 100, 100, 100) 
    
    # Note this next command will fail with a memory error on my computer. 
    test44 = test44[:, :, :, np.newaxis] + x 
    

    그래서 제 질문은 두 부분으로 구성됩니다.

  2. 이러한 방법은 고차원 차원에서 확장 할 수 있습니까?

모든 도움을 주시면 대단히 감사하겠습니다.

답변

4

예 입력하려는 내용이 올바른 모양 인 경우 numpy가 자동으로 브로드 캐스팅이라고합니다. 이 시도 : 나는 어떻게 N 차원의 행동이 종류를 확장하는 방법을 보여 주어야 방송에 정말 좋은 소개로 this을 발견했습니다

Arr1 = Arr1.reshape((100, 10, 1)) 
Arr2 = Arr2.reshape((100, 1, 5)) 
Arr3 = Arr1 + Arr2 

.

+0

그래서 4 차원 방송을하고 싶다면 Arr4 = Arr1 + Arr2 + Arr3라고 말하면 먼저 모든 것을 4 차원으로 재구성해야할까요? –

+0

차원 수 이상뿐 아니라 최종 결과의 모양을 결정하고 입력 배열을 변형하여 최종 모양으로 브로드 캐스팅 할 수 있어야합니다. 예를 들어, 최종 모양이 (2, 3, 4, 100)이어야한다면 다음을 시도해보십시오 :'Arr1.shape = (2, 1, 1, 100); Arr1.shape = (1, 3, 1, 100); Arr1.shape = (1, 1, 4, 100)'. 이 경우 기술적으로 선두의 1을 생략 할 수 있지만이를 명시 적으로 포함하고 싶습니다. –

+0

좋은 덕분에. 나는 성공적으로 방송 할 수 있었지만, 이제 더 높은 차원으로 옮기기 시작할 때 메모리 문제에 부딪혀 덜 "무차별 적"방법을 개발할 필요가 있다고 생각합니다. 그래도 도움을 주셔서 감사합니다. –