如果您使用的是MATLAB版本更新比2008B,你可以使用containers.Map類做你想要什麼,甚至非整數的,非連續和非數值:
x = [ 1 2 3 4 5 6 7 8 9 10];
y = [ 3 6 2 4 1 6 7 0 1 8 ];
z = [ 2 3 8 9 10 3];
F = containers.Map(x,y);
% for a single element:
Fz1 = F(z(1))
% for multiple elements at the same time, you need to use arrayfun
Fz = arrayfun(@(x)(F(x)),z)
的Map類實際上創建了一個所謂的散列表,因此您可以將幾乎任何值映射到其他值(例如字符串,單元格,數組等)。
當該項目不存在時,它將返回一個錯誤。
如果你不能使用MATLAB 2008b或更新版本,有三種可能的非整數域值。
使用插值方法,如interp1
。這可能會產生錯誤的值(事先未提供的值)。您可以使用ismember(z, x)
檢查該情況。其次,你可以創建你自己的方案,從非整數到整數(例如,如果你所有的值都是0.5的倍數,乘以2),並使用Oli展示的解決方案。
另一種解決方案是使用struct
來模擬地圖的行爲。然後,您只需要將域值轉換爲有效的字段名稱(即在MATLAB中爲有效變量名稱的字符串,這可以通過使用genvarname
函數來實現)。
最後兩個解決方案有點骯髒,如果您不考慮考慮,則容易出錯。所以我認爲他們只是作爲最後的手段。
你的例子'x'和'y'是**不是**長度相同,這使得這個問題很難回答...... –
哦,我犯了一個大錯誤, x = [1 2 3 4 5 6 7 8 9 10] y = [3 6 2 4 1 6 7 0 1 8] z = [2 3 8 9 10 3] 結果= [6 2 0 1 8 2] –
類似的問題:[什麼是設計具有有限內存的記憶系統的簡單方法?](http://stackoverflow.com/q/5023998/97160)。 – Amro