2013-03-08 3 views
0

У меня есть следующие матрицы массива B:Печать определенных частей ячейки в виде строк в матрице?

B=[1 2 3; 10 20 30 ; 100 200 300 ; 500 600 800]; 

Который через код объединяется, чтобы сформировать возможные комбинации между значениями. Результаты сохраняются в ячейке G. Таким образом, чтобы G:

G= 
[1;20;100;500] 
[0;30;0;800] 
[3;0;0;600] 
. 
. 
etc 

Хочу форматирования результатов, на основании которых значение из B выбрано:

[1 2 3]  = 'a=1 a=2 a=3' 
[10 20 30] = 'b=1 b=2 b=3' 
[100 200 300]= 'c=1 c=2 c=3' 
[500 600 800]= 'd=1 d=2 d=3' 

Пример, с использованием результатов в текущей ячейке при условии:

[1;20;100;500] 
[0;30;0;800] 
[3;0;0;600] 

Если печать в

a=1 & b=2 & c=1 & d=1 
a=0 & b=3 & c=0 & d=3 % notice that 0 should be printed although not present in B 
a=3 & b=0 & c=0 & d=2 

Обратите внимание, что ячейка G будет меняться в зависимости от кода и не фиксируется. Код, используемый для получения результатов, можно посмотреть здесь: Need help debugging this code in Matlab


Пожалуйста, дайте мне знать, если вам требуется больше информации об этом.

ответ

1

Вы можете попробовать это:

k = 1; % which row of G 

string = sprintf('a = %d, b = %d, c = %d, d = %d',... 
    max([0 find(B(1,:) == G{k}(1))]), ... 
    max([0 find(B(2,:) == G{k}(2))]), ... 
    max([0 find(B(3,:) == G{k}(3))]), ... 
    max([0 find(B(4,:) == G{k}(4))]) ... 
    ); 

Например, для k = 1 вашего примера данных это приводит к

string = 

a = 1, b = 2, c = 1, d = 1 

Краткое объяснение этого кода (в соответствии с просьбой в комментариях) как следует. Для простоты пример ограничен первым значением G и первой линией B.

% searches whether the first element in G can be found in the first row of B 
% if yes, the index is returned 
idx = find(B(1,:) == G{k}(1)); 

% if the element was not found, the function find returns an empty element. To print 
% a 0 in these cases, we perform max() as a "bogus" operation on the results of 
% find() and 0. If idx is empty, it returns 0, if idx is not empty, it returns 
% the results of find(). 
val = max([0 idx]) 

% this value val is now formatted to a string using sprintf 
string = sprintf('a = %d', val); 
+0

Работает как очарование, спасибо! Не могли бы вы объяснить, как работает код? хотел бы узнать :) – NLed