在数组中找到满足条件的中间值
Posted
技术标签:
【中文标题】在数组中找到满足条件的中间值【英文标题】:Find the middle value in array that meets condition 【发布时间】:2020-05-11 03:43:11 【问题描述】:我有逻辑数组(零和一)1500x700
我想在每一列中找到“1”,当列中有多个“1”时,我应该选择中间的。
这样可以吗?我知道如何找到“1”,但如果一列中有两个“1”,我不知道如何提取中间的“1”。
【问题讨论】:
【参考方案1】:find
函数返回您的索引。
>> example=[1,0,0,1,0,1,1];
>> indices=find(example)
indices =
1 4 6 7
>> indices(floor(numel(indices)/2))
ans =
4
对每一列执行此操作,您就有了解决方案。
【讨论】:
【参考方案2】:你可以
-
获取
find
的行和列索引;
使用自定义函数应用accumarray
以获取每列的中间行索引。
x = [1 0 0 0 0; 0 0 1 0 0; 1 0 1 0 0; 1 0 0 1 0]; % example
[ii, jj] = find(x); % step 1
result = accumarray(jj, ii, [size(x,2) 1], @(x) x(ceil(end/2)), NaN); % step 2
注意:
对于偶数个,这给出了两个中间索引的第一个。如果您更喜欢两个中间索引的平均值,请将@(x) x(ceil(end/2))
替换为 @median
。
对于 没有列 的列,结果为 NaN
。如果您更喜欢不同的值,请将 accumarray
的输入第五个参数替换为该值。
例子:
x =
1 0 0 0 0
0 0 1 0 0
1 0 1 0 0
1 0 0 1 0
result =
3
NaN
2
4
NaN
【讨论】:
以上是关于在数组中找到满足条件的中间值的主要内容,如果未能解决你的问题,请参考以下文章