【问题标题】:How to know the value of indices using find function?如何使用 find 函数知道索引的值?
【发布时间】:2019-03-27 06:55:30
【问题描述】:

我有一个名为 datos1 的 4096x2 矩阵。我正在尝试从 [valor_maximo, canal_maximo]=max(datos1(:,2)); 的最高值到给定的百分比(最高值的 5%)与

conteomin=ceil(valor_maximo*0.05);
[canal_minimo, valor_minimo]=find(datos1(:,2) == conteomin);

我的问题是,既然我在这两种情况下都有索引,我怎么知道find 函数中的值?

目前,[canal_minimo, valor_minimo]=... 返回 canal_minimo 的值,但 valor_minimo 仅返回每行的发生次数,而不是矩阵中的实际值;即canal_minimo=3558 valor_minimo=1,而不是等于conteomin

fileID=fopen(uigetfile('*.txt', 'Seleccione el archivo'));
[archivo,~,~,~]=fopen(fileID(1));
datos1=dlmread(archivo,' ',10,0);
fclose(fileID);
set(handles.uitable1,'Data',datos1);

[valor_maximo, canal_maximo]=max(datos1(:,2));
conteomin=ceil(valor_maximo*0.05);
[canal_minimo, valor_minimo]=find(datos1(:,2) == conteomin);

【问题讨论】:

  • 我不确定我是否理解。 find 将索引返回到datos1(:,2) == conteomin 的非零值。也就是说,它会找到datos1(:,2) 正好等于conteomin 的索引。因此,这些位置的值为conteomin。请注意,浮点值的 == 很危险,您的矩阵可能不包含任何具有该值的元素。
  • 我明白了,主要问题在于find 函数。例如:[valor_maximo, canal_maximo] = [10000 1109][valor_minimo, canal_minimo]=[1 3000] 10000 的 5% 是 500。相反,它始终显示为 1。
  • 非常感谢大家,我没有意识到find 在为真时会返回1,因此该值已经存储在另一个变量中。如何分配答案以结束问题?
  • 我将我的 cmets 作为社区 wiki 答案发布。您可以通过单击问题左侧投票箭头下方的复选标记accept the answer。您可能有兴趣参加 tour,其中解释了 Stack Overflow 的工作原理。最后:如果您希望其他(一个)特定用户看到您的评论,请使用@<username> 通知他们;帖子所有者将始终收到通知。因此可以使用@Adriaan 通知我。

标签: arrays matlab matrix find indices


【解决方案1】:

[row,col]=find(LogicalExpression) 为遵循LogicalExpression 的每个元素提供行/列索引。因此,在您的情况下:datos1 第二列的元素等于标量值conteomin 的任何地方都将注册为真,canal_minimo 将具有行号; valor_minimo 显然是一,因为它是列向量的列号,当然是第 1 天。 [row,col,val]=find() 在第三个输出中给出了值,但你不需要它,因为你与一个硬数字进行比较(这是一个坏主意,因为 @CrisLuengo said)。这是因为val 将等于conteomin因为这就是您要求的。显式输出它是没有用的(在这种情况下)。

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2011-05-04
    • 2010-12-05
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多