2013-05-21 4 views
0

Matlab의 알고리즘을 사용하여 매트릭스의 특정 요소를 정기적으로 업데이트하고이를 가장 효과적으로 수행하는 방법을 찾고 있습니다.2D 배열의 특정 요소를 변경하는 것

  1. 내가는 M × N 배열 A 및 1xN 벡터 B이 : 저는 여기에 달성하기 위해 노력하고있어 설명입니다.
  2. 기본적으로 벡터 B은 선택해야하는 A의 열, 즉 C = A(:,B)을 나타내는 논리적 색인입니다.
  3. 불행히도 논리 벡터 B은 일부 프로세스에 따라 다릅니다. 즉, C의 열 수가 고정되어 있지 않음을 의미합니다.
  4. 일부 다른 처리 입력으로 C를 사용하기 Csize(D) == size(C)
  5. 와 동일한 크기를 갖는 다른 어레이 D 생성되며, I는 A와 동일한 크기를 갖도록 D을 "재 형성"할 필요가있다. 까다로운 부분은 위의 # 2에서 선택하지 않은 A의 열을 NaN으로 바꿔야합니다. 물론 나는 그것을 루프를 사용하는 원시 방법으로 할 수있다. 그러나 이것을 MATLAB 방식, 즉 선형 또는 논리적 인덱싱, 벡터화 등으로 처리하려고합니다. 이것은 내가 지금 막 붙어있는 곳입니다.

몇 가지 예는 것을 명확하게하기 :

, 나는 D = [2 5; 6 7; 3 3]를 얻을 수 있습니다 일부 처리 후

A = [1 2 3; 4 5 6; 7 8 9] 
B = [1 0 1] 
C = A(:,B) = [1 3; 4 6; 7 9] 

말할 수 있습니다. 이제 DA과 같은 크기로 바꿔서 NaN, 즉 D = [2 NaN 5; 6 NaN 7; 3 NaN 3]으로 패딩하여 "다시 형형색환"해야합니다. 내가 지금까지 시도했습니다 무엇

,

Atmp = NaN(size(A)); 
Btmp = find(repmat(B,[size(B,1),1])); 
Atmp(Btmp) = D(Btmp); %-> error because D is smaller than A. 

답변

2

방법에 대한

fullD = NaN(size(A)); 
fullD(:, B) = D; 
+0

잘 작동하는. 나는 그것이 정말로 이것과 같은 단순한 무언가 일 것임에 틀림 없다라는 것을 알고 있었다. 그러나 나는 이것을 알아 내려고 노력하고있는 나의 머리를 부수고/치고 있었다. 정말 고마워. – ciklee

+0

@ciklee 당신이 가장 환영합니다. – Shai

관련 문제