2014-11-29 2 views
-1

행렬의 각 행을 벡터에 저장해야합니다. 매트릭스가 될 것 인 경우에 같은 :행렬에 행을 변수로 저장 - MATLAB

mtx = 0  3  4  
     3  0  1  
     4  1  0 

벡터는 다음과 같습니다

vec1 = 0 3 4 
vec2 = 3 0 1 
vec3 = 4 1 0 

내가 어떻게해야합니까? 나는 얼마나 많은 벡터가 있을지 모른다 (코드의 시점에서). 당신이 (런타임 전에 알 수없는 번호) 더 많은 벡터가있는 경우

+0

당신은이를 체크 할 수있다, 당신을 제공합니다 , 0)':) – Thoth

+0

아마도 그 변수를 다루는 것이 지저분 할 것이므로 _need_하지 않아도됩니다. 셀 배열을 사용하는 것이 좋습니다. 아니면 vec1','vec2' 대신에'mtx (2, :)'대신에'mtx (1, :)'을 사용하십시오. –

답변

0
vec1 = mtx(1,:) 
vec2 = mtx(2,:) 
vec3 = mtx(3,:) 

vec{i}i 번째 행 벡터를 포함 이제 셀 어레이

[m, n] = size(mtx); 
for i = 1:m 
    vec{i} = mtx(i, :); 
end; 

를 사용할 수 있습니다. mtx(i,:)을 사용하기 만하면 실제로 이것이 원하는 것인지 생각해야합니다.

+0

vec {i} = mtx (i, :) 문제는 다음과 같습니다. 그것은 동일한 변수에 저장됩니다. 다른 변수에 있어야합니다. –

+0

@EveSmith 그래서 각 변수마다 다른 이름을 원하십니까? 그렇다면 설계 변경에 대해 생각하거나 권장 이유가 없으므로 권장 할만한 이유가 없습니다. – vsoftco

+0

네가 맞아! 나는 복잡했다. 나는 지금 일을 바꿨다. –

0

eval을 사용하지 않고 동적으로 변수를 만들 수 없습니다.

s = struct(); 

for rowi = 1:size(mtx, 1) 
    s.(sprintf('var%d', rowi)) = mtx(rowi,:) 
end 

이 제공 :

s = 

    var1: [0 3 4] 
    var2: [3 0 1] 
    var3: [4 1 0] 
0

이것은 "권장하지 않습니다" 대답은 (아무도 게시하지 않습니다 그 이유는 것입니다 가장 좋은 방법은, 이와 같은 구조의 dynamically 필드를 만드는 것 그것)! 크기 (MTX, 1), '유니': '행 = arrayfun (@ (I) MTX (I, :), 1 :

mxt = [ 0  3  4;  
     3  0  1;  
     4  1  0]; 
for i = 1 : size(mxt,1) 
    eval(['vec',num2str(i),' = mxt(',num2str(i),',:);']) 
end 

vec1 = [0  3  4]; 
vec2 = [3  0  1]; 
vec3 = [4  1  0]; 
+0

그 벡터들을 살펴보고 싶다면 어떻게해야합니까? 크기 (mtx, 1)를 사용하면 얼마나 많은 벡터가 있는지 알 수 있지만 어떻게 접근 할 수 있습니까? –

+0

@EveSmith, 다시 루프에서 'eval'을 사용하여 액세스합니다. 도움이 될'eval'에 대한 도움말을보십시오. – Rashid

+0

코드를 약간 변경 했으므로 이제는 더 좋습니다. 고맙습니다 –

관련 문제