【发布时间】:2020-05-11 03:43:11
【问题描述】:
我有逻辑数组(零和一)1500x700
我想在每一列中找到“1”,当列中有多个“1”时,我应该选择中间的。
这样可以吗?我知道如何找到“1”,但如果一列中有两个“1”,我不知道如何提取中间的“1”。
【问题讨论】:
标签: arrays matlab indexing find logic
我有逻辑数组(零和一)1500x700
我想在每一列中找到“1”,当列中有多个“1”时,我应该选择中间的。
这样可以吗?我知道如何找到“1”,但如果一列中有两个“1”,我不知道如何提取中间的“1”。
【问题讨论】:
标签: arrays matlab indexing find logic
find 函数返回您的索引。
>> example=[1,0,0,1,0,1,1];
>> indices=find(example)
indices =
1 4 6 7
>> indices(floor(numel(indices)/2))
ans =
4
对每一列执行此操作,您就有了解决方案。
【讨论】:
你可以
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
【讨论】: