假設我有兩個資料集,都由一個x和y陣列組成,例如:
x_1 = [1 2 3 4 5 6 7 8 9 10];
y_1 = [8 12 20 3 4 9 10 55 3 2];
x_2 = [2 5 6 8 9];
y_2 = [4 18 3 12 1];
現在,我想計算一個新指標z = y_1 ./ y_2,但我想比較具有相同值y_1的元素的元素:y_2x
z = [12 4 9 55 3 2] ./ [4 18 3 12 1]
然后,我怎樣才能找到第二個陣列,該陣列僅包含 的值以及以有效方式出現y_2的相應x_2值?x_1
到目前為止,我想出了這個解決方案,但我懷疑這是最有效的可能性:
for i = 1:numel(x_2)
z(i) = y_2(i) / y_1(y_1 == x_2(i));
end
由于在 Matlab 中回圈元素通常可以避免,我認為有更好的方法來做到這一點。
所以基本上,我想重新采樣第二個資料集以使其x_2陣列等于x_1
uj5u.com熱心網友回復:
您可以使用以下方法對其進行矢量化ismember:
[Lia,Locb] = ismember(x_1, x_2);
z = y_1(Lia) ./ y_2(nonzeros(Locb).');
應不應該是另一個問題。自從 MATLAB 開始引入 JIT 編譯引擎以來,避免 MATLAB 中的回圈在很大程度上是一種過時的策略。我懷疑矢量化版本會比 for 回圈快,除了可能是最大的資料集,我不相信它更具可讀性。YMMV
uj5u.com熱心網友回復:
類似于以前的答案,但更短:
y_1(ismember(x_1,x_2))./y_2
注意:我已經在 Octave 上檢查過這個,因為沒有 Matlab 許可證。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/476236.html
標籤:matlab
