MATLAB: Использование оператора If со строкой для возврата значений из других массивов - PullRequest
0 голосов
/ 02 ноября 2010

У меня есть программа Matlab, в которую я импортирую несколько массивов из Excel.Я пытаюсь написать оператор if, который выглядит в первом массиве, скажем:

Thing-1 Thing-1     Thing-3     Thing-5

Если столбец является «Thing-1», то он переходит в другой массив и вычисляет 3 значения, которыедолжны быть даны разные имена переменных ... любое руководство будет высоко ценится!Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 ноября 2010

Вам нужна такая функция, как vlookup, как в Excel.

Я написал один. Вот исходный код:

function [content, index] = vlookup(m, e, column, lookcolumn)


if isempty(m) || isempty(e), return; end
if nargin <= 3, lookcolumn = 1; end

isechar = ischar(e);
assert(isechar || isnumeric(e), 'the second parameter must be a string or numeric');

if iscell(m)
    content = {}; index = [];
    if isechar
        index = find(strcmp(e, m(:, lookcolumn)));
        content = m(index, column);
    else
        for i = 1:size(m, 1)
            if isnumeric(m{i, lookcolumn}) && m{i, lookcolumn} == e
                content = [content; m(i, column)]; %#ok<*AGROW>
                index = [index; i];
            end
        end
    end
else
    assert(~isechar, 'When the first para is a matrix, the second para must be numeric');

    index = find(m(:, lookcolumn) == e);
    content = m(index, column);
end
0 голосов
/ 02 ноября 2010

Вопрос ... не очень понятен, но позвольте мне дать вам несколько советов.

Допустим, вы прочитали некоторые данные из книги Excel, в которой первая строка - это заголовки, а затем множество строк с цифрами.

[num,txt] = xlsread(excelFileName);

, чтобы num содержал числовые данные и txt заголовки столбцов строки.

Затем вы можете проверить строку Thing-1 в заголовках столбцов. thingOneIdx - массив с индексами в столбцах заголовка. В вашем примере это будет [1 2], так как первые два столбца: Thing-1.

thingOneIdx = find(strcmp('Thing-1',txt));

Вы можете создать три массива ячеек firstValue, secondValue и thirdValue, в которых будут храниться результаты трех вычислений. Если вам нужно хранить данные Thing-1 в дополнительном массиве, вы можете сделать это аналогично.

%# define cell arrays (do it in one go using deal)
[firstValue,secondValue,thirdValue] = deal(cell(length(thingOneIdx),1));

%# for simplicity and readability, loop through isThingOneIdx to assign data
for ct = 1:length(thingOneIdx)
    myIdx = thingOneIdx(ct);
    firstValue{ct} = someCalculation(num(myIdx,:));
    secondValue{ct} = someOtherCalculation(num(myIdx,:));
    %# etc
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...