【问题标题】:Can you explain what this line does in Matlab你能解释一下这行在 Matlab 中的作用吗
【发布时间】:2020-05-29 23:33:46
【问题描述】:

我是 Matlab 新手,我只是被这行代码卡住了:

[r,c] = find(abs(fh) <= 2 );

注意:具有讽刺意味的是,我很容易理解作业的正确部分。

但是左边部分(可能是变量的定义)......我不知道如何搜索,因为我通过谷歌搜索方括号的结果太笼统了。

我的假设是这行代码正在创建一个包含 r 行和 c 列的矩阵,但在其余代码中找不到 r 和 c.... 或者它可能是一个包含两个元素的简单数组。 ..但老实说,这对我来说没有多大意义。

你们能帮帮我吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    当您看到该语法时,这意味着被调用的函数返回了多个输出参数(在本例中为两个)。

    了解函数输出参数的最佳方法是查看文档: https://www.mathworks.com/help/matlab/ref/find.html#d120e368337

    [row,col] = find(___) 返回每个的行和列下标 使用任何输入参数的数组 X 中的非零元素 以前的语法。

    输出参数是位置参数,所以r 是行,c 是列。

    【讨论】:

      【解决方案2】:

      查看 Matlab find() 文档。

      • 如果 X 是向量,则 find 返回与 X 方向相同的向量。

      • 如果 X 是多维数组,则 find 返回结果的线性索引的列向量。

      • 如果 X 不包含非零元素或为空,则 find 返回一个空数组。

      如果你打电话

      X = [18 3 1 11; 
           8 10 11 3; 
           9 14 6  1; 
           4 3 15 21 ]
      
      [row,col] = find(X>0 & X<10,3)
      

      你会得到:

      row = 3×1
      
           2
           3
           4
      
      col = 3×1
      
           1
           1
           1
      

      它表示满足您定义的条件的每个元素的索引(行号和列号)。由于它返回超过 1 个值,因此您可以将输出划分为两个不同的变量,这就是左侧所代表的内容。

      【讨论】:

      • 当时比我想象的要难得多!我正在尝试使用 numpy 在 Python 中移植该行,但我只是接近结果。使用 rc = np.nonzero(np.abs(fh)
      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2015-11-27
      • 2023-03-26
      相关资源
      最近更新 更多