2014-09-03 2 views
1

"매우 간단한"문제를 해결하려고합니다. 파이썬에서는 그렇게 간단하지 않습니다. 다음과 같이 BI는 매트랩 B. 와의 특정 요소를 대체 할 대형 행렬 A와 또 다른 작은 행렬을 것입니다 감안할 때 :파이썬에서 특정 좌표의 행렬 대체 요소

Given A, row_coord = [1,5,6] col_coord = [2,4], and a matrix B of size(3X2), A[row_coord, col_coord] = B 

를 파이썬에서 나는 세트를 생성하는 itertools에서 product(row_coord, col_coord)을 사용하려 A에서 액세스 할 수 있어야하지만 작동하지 않는 모든 인덱스 중. 서브 매트릭스 대체에 대한 모든 예는 블록 단위 row_coord = col_coord 예제를 참조하십시오. http://comments.gmane.org/gmane.comp.python.numeric.general/11912을 제외한 구체적인 내용은 내가 직면 한 문제와 관련이있는 것으로 보이며 링크의 코드가 작동하지 않습니다.

참고 : double for-loop를 통해 필요한 것을 구현할 수 있다는 것을 알고 있습니다. 그러나 이러한 루프를 반복하면 9 초가 걸리므로이를 구현하는 더 빠른 방법을 찾고 있습니다.

도움이 될 것입니다.

+2

몇 가지 예제 행렬 및 벡터를 제공 할 수 있습니까? 그들은 시험 할만큼 충분히 커질 필요가 없습니다. – Ffisegydd

+0

물론, A = np.zeros ([20,20]) col_coord = [0,1,3] row_coord = [1,2] B = 1 (B를 상수로 설정합시다). 이 문제를 해결하는 간단한 방법은 다음과 같습니다. in a row_coord : for col_coord : A [row_coord [a], col_coord [b]] = 1 그러나 나는 intertools 유틸리티를 사용하여 더 빠르게 만들고 싶습니다. . 고마워요 :-) – user3861925

답변

0

배열이 B 인 경우 (B이 스칼라 인 경우) 다음 코드는 선택된 요소를 B 값에 할당해야합니다.

itertools.product 우리는 다음 원래의 배열 색인에 numpy 배열로 변환하여 사용하는 좌표 쌍을 모두 생성합니다 :

import numpy as np 
from itertools import product 

A = np.zeros([20,20]) 

col_coord = [0,1,3] 
row_coord = [1,2] 

coords = np.array(list(product(row_coord, col_coord))) 

B = 1 

A[coords[:,0], coords[:,1]] = B 

나는 색인 작업을 수행하는 방법을 해결하기 위해 this excellent answer by unutbu을 사용했다.

+0

정말 고마워요! 필요에 따라 작동합니다. 목록에 np.array 캐스팅하지 않고 직접 [product (row_coord, col_coord)]를 사용하고 Traceback (가장 최근 호출 마지막) : IndexError : 인덱스는 int 또는 시퀀스 여야합니다. – user3861925

+0

기꺼이 도움이 될 수 있습니다. 내 대답이 도움이되었다고 생각하면 [내 대답 수락] (http : //meta.stackexchange. com/a/5235/204922). – Ffisegydd