我有一列從1981年到2000年的年份對應於另一列的價格。我正試圖製作一個循環,循環遍歷從1990年到2000年的這些年份,並打印出與其年份相關的價格。到目前爲止我有這個代碼,但我不知道爲什麼它不會運行,任何幫助都會很棒。如何通過對應於另一個向量的向量循環MATLAB
for x=1:year == 1990:2000
v = find(isfinite(price));
v
end
我有一列從1981年到2000年的年份對應於另一列的價格。我正試圖製作一個循環,循環遍歷從1990年到2000年的這些年份,並打印出與其年份相關的價格。到目前爲止我有這個代碼,但我不知道爲什麼它不會運行,任何幫助都會很棒。如何通過對應於另一個向量的向量循環MATLAB
for x=1:year == 1990:2000
v = find(isfinite(price));
v
end
如果輸入的數據是這樣的,其中第一列是一年,第二列是價格
data = [1990, 2.50;
1991, 3.00;
...
2000, 4.00];
你可以通過多年的循環在你的for循環(注意語法,以及如何這與您的帖子中的帖子相比較),然後使用logical indexing找到價格與當年相對應的第二列。
for year = 1990:2000
% Grabs column 2 where column 1 is equal to the year
price = data(data(:,1) == year, 2);
end
即使你的數據存在於兩個不同的數據結構,你可以做同樣的事情(只要它們是相同的大小)。
years = [1990, 1991, 1992, ... 2000];
prices = [2.50, 3.00, 3.50, ... 4.00];
for year = 1990:2000
price = prices(years == year);
end
編輯
如果你是環厭惡,你可以definitly做同樣的事情,而沒有for循環。最強大的解決方案是使用arrayfun
。
annualPrices = arrayfun(@(x)prices(years == x), years, 'uniform', 0);
這將返回一個單元格數組,其中每個元素都是給定年份的所有價格。
但是,如果您保證每年只有一個價格,您可以省略uniform
輸入,您將得到一系列價格。
annualPrices = arrayfun(@(x)prices(years == x), years);
其中一個好處是,這些方法都不需要對數據進行額外的操作(例如排序)。
例1:
讓我們做一個矩陣保存您的數據:
M = ones(100,2); % 1st column for the year and the second column for the prices
M(:,1) = (1951:2050).';
M(:,2) = rand(100,1);
一個一個班輪你的問題可以如下:
M((M(:,1)<= 2000 & M(:,1) >= 1990),2)
例2:
如果你有兩個向量的價格,多年來,首先確保你的年數進行排序:
[sortedYears,Idx] = sort(years); % sort the years vector
sortedPrices = prices(Idx); % use the index to sort the prices in the same order
現在使用下面的一個班輪:
sortedPrices((sortedYears<= 2000 & sortedYears >= 1990));
因爲你似乎剛纔它將無法運行發明了一些語法!你在哪裏讀過「x = 1:year == 1990:2000」是有效的? –