我有一個3D 矩陣,我需要找到最接近 [0 到 1] 范圍的值。例如,我有 [-2.3 -1.87 -0.021 1.1 1.54] 并且應該選擇 -0.021,因為它是最接近該范圍的值。
編輯:范圍內將有零或一個值。如果有一個,應該回傳,如果沒有,應該回傳最接近的值
編輯:這是我試圖正常作業的代碼部分:
rt = zeros(size(audio_soundIntervals, 1), size(prtcpnt.audioAttention_ToM.sound_eventTime, 1), size(prtcpnt.audioAttention_ToM.sound_eventTime, 2));
for r = 1:size(prtcpnt.audioAttention_ToM.sound_eventTime, 1)
for t = 1:size(prtcpnt.audioAttention_ToM.sound_eventTime, 2)
for b = 1:size(audio_soundIntervals, 1)
% here, I want to find the nearest element of audio_eventReshape(:, r, t) to the range [audio_soundIntervals(b, r, t), audio_soundIntervals(b, r, t) 1]
end
end
end
uj5u.com熱心網友回復:
最接近范圍中心的值始終是您要查找的值。我建議你在紙上嘗試一些例子來說服自己。
范圍 [a,b] 的中心是 (ba)/2。在您的情況下,這是 0.5。
因此,找到最小值abs(A-0.5)將為您提供答案。如果A是一個矩陣,那么A(:)是一個可以應用您的操作的向量。所以我們有:
[~,indx] = min(abs(A(:)-0.5));
或更一般地說:
[~,indx] = min(abs(A(:)-(b-a)/2));
indx是您要查找的元素的線性索引A,使用 . 獲取值A(indx)。
uj5u.com熱心網友回復:
您可以使用此函式找到最接近A范圍的值range:
function out = near_range(A, range)
[m1, idx1] = min(A - range(1), [], 'all', 'ComparisonMethod', 'abs');
if abs(m1) >= diff(range)
out = A(idx1);
return
end
[m2, idx2] = min(A - range(2), [], 'all', 'ComparisonMethod', 'abs');
if abs(m1) < abs(m2)
out = A(idx1);
else
out = A(idx2);
end
end
用法:
result = near_range([-2.3 -1.87 -0.021 1.1 1.54], [0 1]);
編輯:
從 MATLAB R2021b 開始提供函式'ComparisonMethod'min 選項。對于舊版本,這是一種方法dsearchn:
[k, dst] = dsearchn(A(:), range(:));
result = A(k(1 (diff(dst) < 0)));
編輯2:
我將第二種方法打包為一個函式:
function out = near_range(A, range)
[k, dst] = dsearchn(A(:), range(:));
out = A(k(1 (diff(dst) < 0)));
end
用法:
rt(b, r, t) = near_range(audio_eventReshape(:, r, t), [audio_soundIntervals(b, r, t), audio_soundIntervals(b, r, t) 1]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412038.html
標籤:
