【问题标题】:Matlab: find a value in a matrixMatlab:在矩阵中找到一个值
【发布时间】:2016-09-09 13:13:02
【问题描述】:

我有以下矩阵:

A= [23 34 45 0 0 0; 21 34 0 0 23 11; 34 23 0 0 0 22]

我想查找一个值是否存在,如果存在,我想查找以下值。

例如,我想在 A 中找到值 23,如果它存在,我想输出一个仅包含 23 及其以下值的矩阵

B= [23 34 45 0 0 0; 0 0 0 0 23 11; 0 23 0 0 0 22]

【问题讨论】:

  • 请添加您目前尝试过的内容。
  • 我相信您正在寻找 find 函数 - 查找具有 23 的行并重新编制索引。
  • 我使用 find 找到了单个值 23,但我不知道如何将以下值放入矩阵中

标签: matlab matrix find


【解决方案1】:

这是一个有趣的问题,我有一个非循环的答案,它使用cumsumfind 的有趣效果来提高效率。

G = zeros(size(A));
T = find(A==23);
G(T) = 1;
mask = cumsum(G,2)>0;

result = mask .* A;

>> result =

23    34    45     0     0     0
 0     0     0     0    23    11
 0    23     0     0     0    22

我认为这是一种更有效的方法。

========编辑=========

更好的是,使用逻辑索引:

B = A.*(cumsum(A==23,2)>0);

感谢@obchardon

【讨论】:

  • 或者简单地说 B = A.*cumsum(A==23,2)
  • @obchardon 那就更好了,为什么我什至想到使用find 我不知道。
  • 今天是星期五 ;) 哦,顺便说一句:也许使用起来更安全:B = A.*(cumsum(A==23,2)>0)(所以如果每行超过 23 个,它仍然可以工作)
【解决方案2】:

find() 在矩阵 A 中返回所需值的行和列,在您的情况下为“23”。 使用 for 循环,您可以复制该值及其以下值:

A = [23 34 45 0 0 0; ...
    21 34 0 0 23 11; ...
    34 23 0 0 0 22];
[r, c] = find(A==23);

B = zeros(3,6);

for i=1:length(r)
    columns = c(i):length(B);
    B(i,columns) = A(r(i),columns);
end;

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多