2014-02-02 5 views
0

Я пытаюсь распечатать очень простую таблицу (используя fprintf), показывающую статистику по набору данных, которые я приобрел.MATLAB - поиск индекса строки в векторе

Я новичок в Matlab, но - я используется для Java - Я думаю, что это должно работать ...

Labels = ['Max','Min','Mean','Median','Std. Dev.','Tol. Range']; 
for i = 1:6 
    fprintf('| %c | %4.3f | %4.3f |\n', Labels(i), unmodVals(i), modVals(i)); 
end 

Но это не работает. :(

По какой-то причине массив индексации строк не работает точно так же, как и в Java, так что я полностью потерял

он заканчивает печатать что-то вроде:.

| M | #### | #### | 
| a | #### | #### | 
| x | #### | #### | 
| M | #### | #### | 
| i | #### | #### | 
| n | #### | #### | 

Может кто-то мне точку в правильном направлении

ответ

2

Символьные массивы работают немного по-разному в среде MATLAB Labels не 1x6 массив строк, как вы ожидаете, что это будет,?. линия у вас есть эквивалентно

Labels = strcat('Max','Min','Mean','Median','Std. Dev.','Tol. Range'); 

Итак, это массив символов 1x35, и вы индексируете его по одному символу за раз. Измените Labels на массив ячеек строк, как показано ниже. Вы должны индексировать в него, используя скобки { } вместо скобок () и изменить соответствующий формат fprintf спецификатор к %s (%c для печатных знаков)

Labels = {'Max','Min','Mean','Median','Std. Dev.','Tol. Range'}; 

for i = 1:6 
    fprintf('| %s | %4.3f | %4.3f |\n', Labels{i}, unmodVals(i), modVals(i)); 
end 
0

Вы хранения строк в массиве называется Labels. В MATLAB, когда вы пишете ['a', 'bc'], он объединяет две строки и производит abc. Поэтому вы должны использовать ячейки массивов для хранения строк разного размера.

Labels = {'Max','Min','Mean','Median','Std. Dev.','Tol. Range'}; %notice the curly braces. 

%generating random values of `unmodVals` and `modVals` 
unmodVals=randi(1000,[1 6]); 
modVals=randi(1000,[1 6]); 
for i = 1:6 
    fprintf('| %s | %4.3f | %4.3f |\n', Labels{i}, unmodVals(i), modVals(i)); %notice change from `%c` to `%s`, c stands for charater, s for string. 
end 

Примечание: Если вы видите, как ваши Label переменная выглядит, вы увидите следующее:

Labels = MaxMinMeanMedianStd. Dev.Tol. Range 
Смежные вопросы