我有一個matlab程序,我從excel中導入一些數組。我試圖寫一個if語句看起來第一陣列中,說:MATLAB:使用If語句和字符串從其他數組返回值
Thing-1 Thing-1 Thing-3 Thing-5
如果列是一個「東西-1」,然後將其轉移到一個不同的排列,並計算3個值即是被賦予不同的變量名稱...任何指導將非常感謝!謝謝!
我有一個matlab程序,我從excel中導入一些數組。我試圖寫一個if語句看起來第一陣列中,說:MATLAB:使用If語句和字符串從其他數組返回值
Thing-1 Thing-1 Thing-3 Thing-5
如果列是一個「東西-1」,然後將其轉移到一個不同的排列,並計算3個值即是被賦予不同的變量名稱...任何指導將非常感謝!謝謝!
您需要像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
問題是......不是很清楚,但讓我試着給你一些建議。
假設您從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
哦,代碼很雜亂 – zhiqiang 2010-11-02 04:15:19
瞭解如何格式化代碼。在編輯答案時,請查看文本字段上方的工具欄和右側的橙色問號。 – yuk 2010-11-03 00:49:14