2014-08-29 3 views
1

numpy 행렬에 배열 객체의 1 차원 배열을 변환하여 행에 대한 요소 합계를 수행하고자합니다. 어레이의 1 차원 배열이다배열 객체의 1 차원 배열에서 행렬 만들기

out = array([[array([0]), array([ 23.]), array([0]), array([0]), 
    array([ 1., 0.]), array([0]), array([0]), array([0])], 
    [array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 19.]), array([ 15.]), array([ 25.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 1.])], 
    [array([ 0.]), array([ 0.]), array([ 20.]), array([ 20.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 22.]), array([ 26.]), array([ 23.]), array([ 18.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 0.]), array([ 20.]), array([ 13.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 16.]), array([ 20.]), array([ 18.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([0]), array([ 23.]), array([0]), array([0]), 
    array([ 1., 0.]), array([0]), array([0]), array([0])]], dtype=object) 

먼저 I는 (존재하는 경우) 서로 다른 배열에서 두 값을 합산하고 싶은,이 제 어레이 (1 + 0) 및 마지막 배열의 경우이며 (1 + 0), 모든 단일 값으로 배열의 최종 1D 배열을 가지고 :

out 2 = array([[array([0]), array([ 23.]), array([0]), array([0]), 
    array([ 1]), array([0]), array([0]), array([0])], 
    [array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 19.]), array([ 15.]), array([ 25.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 1.])], 
    [array([ 0.]), array([ 0.]), array([ 20.]), array([ 20.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 22.]), array([ 26.]), array([ 23.]), array([ 18.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 0.]), array([ 20.]), array([ 13.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 16.]), array([ 20.]), array([ 18.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]), 
    array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])], 
    [array([0]), array([ 23.]), array([0]), array([0]), 
    array([ 1.]), array([0]), array([0]), array([0])]], dtype=object) 

내가 (그것의 매트릭스를하고 싶다 "OUT2"일단 8X8, OUT2의 마지막 배열 "out2"의 첫 번째 배열이 새 행렬의 첫 번째 원시가되고 두 ​​번째 배열이 두 번째 원시가되도록 첫 번째 배열과 첫 번째 배열이 같으므로 고려하면 안됩니다. 새로운 행렬의 첫 번째 열의 처음 두 행, 즉 모든 열의 끝까지 첫 번째 열의 두 번째 두 행을 합산하는 것이 아이디어입니다. 이것은 NumPy와의

sum1 = [0,23,18,0,1,0,0,0] 
sum2 = [0,19,35,45,0,0,0,0] 
sum3 = [22,26,43,31,0,0,0,0] 
sum4 = [0,23,18,0,1,0,0,0] 

을 수행 할 수 있습니다 방법 :

최종 출력 (합 후) 4 개 배열로 만들어 져야한다? 고마워요

+0

을 당신이 정말로 D에 필요한 경우 이거. 나는 당신의 코드에 많은 문제가 있다고 생각한다. – Mansueli

+0

그럴 수 있습니다, 나는 numpy에서 매우 초보자입니다. 배열 -> 행렬 변환을 거치지 않고이를 수행 할 수있는 방법이 있습니까? – diegus

답변

1

out2 모든 요소가 하나만있는 것이 확실하지 않습니다. arrays; 어쩌면 그것은 정말로 당신이 필요로하지 않는 중간 단계 일 것입니다. 여하튼 map을 사용하여 행의 모든 ​​하위 목록에 sum을 적용 할 수 있습니다.

from numpy import array 
out = array([[array([0]), ..., array([0])]], dtype=object) 
matrix = array(map(lambda row: map(sum, row), out)) 

출력을 matrix 위해 : (또는 마지막 행을 제외 matrix = matrix[:-1,:]을 사용하여이리스트의-목록은 다음 array를 사용하여 numpy "매트릭스"로 다시 설정할 수 있습니다, 기본 파이썬 발생합니다.)

[[ 0. 23. 0. 0. 1. 0. 0. 0.] 
[ 0. 0. 18. 0. 0. 0. 0. 0.] 
[ 0. 19. 15. 25. 0. 0. 0. 1.] 
[ 0. 0. 20. 20. 0. 0. 0. 0.] 
[ 22. 26. 23. 18. 0. 0. 0. 0.] 
[ 0. 0. 20. 13. 0. 0. 0. 0.] 
[ 0. 16. 20. 18. 0. 0. 0. 0.] 
[ 0. 0. 18. 0. 0. 0. 0. 0.] 
[ 0. 23. 0. 0. 1. 0. 0. 0.]] 

이제 예를 들어 matrix[0:2,:] 행렬의 첫 번째 두 행을 transpose으로 가져오고 mapsum을 사용하여 열의 합계를 얻습니다. 배열 numpy을 얻으려면 array을 적용하십시오. 물론

sum1 = array(map(sum, matrix[0:2,:].transpose())) 

, 당신은 또한 위의 모든 계산 지능형리스트에서 array를 작성하여 4 × 8 매트릭스에 모든 사람들을 넣을 수 있습니다. 여기에서 sums[0]은 위의 sum1에 해당합니다.

sums = matrix[0::2] + matrix[1::2] 

: 1 행 (matrix[1::2])에서 시작하여 매 다른 행과 열 0 (matrix[0::2])으로 시작하는 행렬의 행을 번갈아 추가 numpy 매트릭스 첨가하여

sums = array([map(sum, matrix[i:i+2,:].transpose()) 
       for i in range(0, len(matrix), 2)]) 

또는 훨씬 간편 sums의 출력은 : (당신의 sum4이 잘못합니다, 당신은 행 8과 9를 사용)

[[ 0. 23. 18. 0. 1. 0. 0. 0.] 
[ 0. 19. 35. 45. 0. 0. 0. 1.] 
[ 22. 26. 43. 31. 0. 0. 0. 0.] 
[ 0. 16. 38. 18. 0. 0. 0. 0.]] 
+0

행렬을 반복하고 마지막 4X8 행렬을 사용하여 두 행을 2로 더할 수 없습니까? – diegus

+0

@diegus 당신은 무엇을 의미합니까? 당신은 map/sum/zip 구조를 통해 for 루프를 선호합니까? 아니면 하나의 루프에서 네 개의 합계를 모두 생성하고 싶습니까? 네 개의 별개의 합계 변수가 필요하다고 생각했습니다. –

+0

훨씬 더 큰 행렬을 다루어야하고 sum1, sum2, sum3, ... sumn을 쓸 수 없기 때문에 하나의 루프에서 4 개의 합계를 만드는 것을 선호합니다. 고마워. – diegus