簡體   English   中英

如何找到最接近 MATLAB 范圍的矩陣元素值?

[英]How can I find the nearest matrix element value to a range in MATLAB?

我有一個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

最接近范圍中心的值始終是您要查找的值。 我建議你在紙上嘗試一些例子來說服自己。

范圍 [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)獲取值。

您可以使用此 function 來找到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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM