2015-03-25 2 views
0

Я только что начал изучать MATLAB. Пожалуйста, найти мои коды нижеМатрица MATLAB (Cell Array) Индексирование

m= ['A','B','C']; 
cs=size(m,2); 
for i=1:cs 
    for j=1:cs 

      if i~=j 
      s1=(m(i));s2=',';s3=(m(j)); 
       s=strcat(s1,s2,s3); 
        disp(s); 
     end  
    end 
end 

Он производит следующий вывод в командном окне.

A,B 
A,C 
B,A 
B,C 
C,A 
C,B 

Но я хочу, чтобы обернуть все выходы в одну матрицу (или элемент массива), Позволяет сказать new_M. Чтобы значения new_M содержали все вышеприведенные значения, подобные этому.

new_M (6,1) = 
[ A,B 
A,C 
B,A 
B,C 
C,A 
C,B ] 

Ваша помощь будет очень признательна. Заранее спасибо.

ответ

1

идиоматических способ сделать это было бы использовать nchoosek, чтобы получить показатели, которые вы хотите, а затем использовать линейную индексацию:

m = ['A','B','C'] %// For a char array OR 
m = {'A','B','C'} %// For a cell array 
I = nchoosek(1:numel(m), 2) 
new_M = m([I; I(:,end:-1:1)]) 
+0

Спасибо ТОН г-н knedlsepp. –

1

Это будет работать. В «с» вы найдете значения

m= ['A','B','C']; 
cs=size(m,2); 
c = cell(6,1) 
t = 1; 
for i=1:cs 
    for j=1:cs 

      if i~=j 
      s1=(m(i));s2=',';s3=(m(j)); 
       s=strcat(s1,s2,s3); 
       disp(s) 
       c{t} = s; 
       t=t+1; 
     end  
    end 
end 
+0

Благодаря Тонна мистер Сальваторе –

1
m= ['A','B','C']; 
cs=size(m,2); 
new_M = []; 
for i=1:cs 
    for j=1:cs 
     if i~=j 
     s1=(m(i));s2=',';s3=(m(j)); 
     s=strcat(s1,s2,s3); 
     new_M = [new_M;s]; 
     end  
    end 
end 

new_M матрица будет содержать все необходимые значения.

+0

Спасибо Тонна Mr JNY Ranger и г-песчаная –

Смежные вопросы