MATLAB:使用带有字符串的If语句返回其他数组的值

时间:2010-11-01 23:50:59

标签: matlab

我有一个matlab程序,我从excel导入一些数组。我正在尝试编写一个在第一个数组中查找的if语句,例如:

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

如果一列是“Thing-1”,那么它将转到另一个数组,并计算3个值,这些值将被赋予不同的变量名...任何指导都将非常感谢!谢谢!

2 个答案:

答案 0 :(得分:0)

问题是......不是很清楚,但让我试着给你一些建议。

假设您从Excel工作簿中读取了一些数据,其中第一行是标题,后面是许多带数字的行。

[num,txt] = xlsread(excelFileName);

以便num包含数字数据,txt包含字符串列标题。

然后,您可以在列标题中检查字符串Thing-1thingOneIdx是一个数组,其中包含标题列的索引。在您的示例中,它将是[1 2],因为前两列是Thing-1

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

您可以创建三个单元格数组,firstValuesecondValuethirdValue,用于存储三个计算的结果。如果您需要将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

答案 1 :(得分:0)

您需要像Excel中的vlookup一样的功能。

我写过一篇。这是源代码:

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