Arrays Matlab,求最小值的指标,条件是它必须为负

Arrays Matlab,求最小值的指标,条件是它必须为负,arrays,matlab,find,min,Arrays,Matlab,Find,Min,在给定的数组中,我需要找到数组中最小值的索引,但前提是它为负 例如:[1,2,3,4]将不返回索引 而[1,4,-7,-2]将返回3 我认为使用find()命令一定很简单,但我不知道如何在这种特定情况下使用它。假设输入矩阵是A,这应该可以做到: find(A==min(A) & A<0) find(A==min(A)&A>A=[1,2,3,4]; >>B=[1,4,-7,-2]; >>find(A==min(A)&A>find(B==min(B)&B有时,将所有内容都放到一个复杂

在给定的数组中,我需要找到数组中最小值的索引,但前提是它为负

例如:
[1,2,3,4]
将不返回索引

[1,4,-7,-2]
将返回
3


我认为使用
find()
命令一定很简单,但我不知道如何在这种特定情况下使用它。

假设输入矩阵是
A
,这应该可以做到:

find(A==min(A) & A<0)
find(A==min(A)&A>A=[1,2,3,4];
>>B=[1,4,-7,-2];

>>find(A==min(A)&A>find(B==min(B)&B有时,将所有内容都放到一个复杂的向量表达式中并不是最优的

在本例中,我希望它能够更快地避免调用
find

function [i] = most_negative_index(x)
   [mn, i] = min(x);
   if mn >= 0
       i = [];
   end
end

当我试着回答你的问题时,我自己发现了:DI最初发布了一个函数,然后想出:
find(cell2mat(arrayfun(@(x)eq(x,min)(a(符号a)=-1)),a,'UniformOutput',false)))在你开始编码之前,你需要退后一步思考一下……Juestestin:是的。D,这是我们最好的时候。这可能比Ben Voigt发布的解决方案慢大约3倍,只是一些需要考虑的事情。上面的函数一次或两次应该可以。实现Ben的解决方案需要一个单独的函数文件或附加到另一个函数文件末尾的函数,这将限制该函数的范围。我也只是将此解决方案转换为100k向量,耗时0.001秒。在我看来,这样做更好清晰简洁的解决方案(如上所述)并担心以后的优化问题,但最终取决于OP的问题。@jucestain我只是指出了它,因为它值得考虑。但您根本不需要单独的函数。它可能不是一行,但没有理由不能在代码中与此解决方案完全一致。
function [i] = most_negative_index(x)
   [mn, i] = min(x);
   if mn >= 0
       i = [];
   end
end