MATLAB 遍历矩阵
本教程将讨论如何使用 MATLAB 中的线性索引、arrayfun()
和 cellfun()
函数迭代矩阵。
在 MATLAB 中使用线性索引迭代矩阵
在一个矩阵中,有两种索引;一个是行和列索引,我们必须在其中提供行号和列号才能访问矩阵中存在的元素,第二个是线性索引,其中我们可以仅使用元素的线性索引来访问元素。例如,请参考下面的代码。
m = [2 6 1; 17 19 18]
row_col_index = m(2,3)
linear_index = m(6)
输出:
m =
2 6 1
17 19 18
row_col_index =
18
linear_index =
18
在上面的代码中,我们使用两种索引访问矩阵的最后一个元素。在线性索引中,元素从第一列开始出现在矩阵中。因此,如果从第一列开始计数,则最后一个元素出现在第六个索引处。为了使用行和列索引迭代矩阵,你需要两个循环,但在线性索引的情况下,你只需要一个循环。例如,让我们使用线性索引遍历矩阵。请参考下面的代码。
m = [2 6 1; 17 19 18];
for i = 1:numel(m)
disp(m(i))
end
输出:
2
17
6
19
1
18
在上面,我们使用 numel()
函数来获取给定矩阵中存在的元素总数。并且使用循环和线性索引,我们在命令窗口上一个一个地显示每个元素。请注意元素在命令窗口上的显示顺序,这就是线性索引的顺序。
在 MATLAB 中使用 arrayfun()
函数遍历矩阵
如果你有一个函数并希望将其应用于数组或矩阵的每个元素,一种方法是如上所述迭代每个元素并将该函数应用于每个元素,但还有另一种简单的方法可以使用 arrayfun()
将给定的函数应用于数组或矩阵的每个元素。请参考下面的代码。
output = arrayfun(myFunction , array);
在上面的代码中,arrayfun()
将存储在 myFunction
中的函数一一应用于数组的每个元素,并将结果存储在变量 output
中。例如,让我们将定义的函数应用于矩阵的每个元素。请参考下面的代码。
myMatrix = [0 90; 180 270]
myFunction = @(x) cos(x);
output = arrayfun(myFunction , myMatrix)
输出:
myMatrix =
0 90
180 270
output =
1.0000 -0.4481
-0.5985 0.9844
从输出中可以看出,函数 cos(x)
应用于矩阵的每个元素,结果存储在变量 output
中。查看此链接以获取有关 arrayfun()
的更多信息。
在 MATLAB 中使用 cellfun()
函数遍历矩阵
如果你有一个函数并希望将其应用于给定单元格的每个元素,一种方法是如上所述遍历每个元素并将该函数应用于每个元素,但还有另一种简单的方法,你可以使用 cellfun()
将给定的函数应用于单元格的每个元素。请参考下面的代码。
output = cellfun(myFunction , myCell);
在上面的代码中,cellfun()
将存储在 myFunction
中的函数一一应用于单元格的每个元素,并将结果存储在变量 output
中。例如,让我们将定义的函数应用于单元格的每个元素。请参考下面的代码。
myCell = {0,90,180,270}
myFunction = @(x) sin(x);
output = cellfun(myFunction , myCell)
输出:
myCell =
1×4 cell array
{[0]} {[90]} {[180]} {[270]}
output =
0 0.8940 -0.8012 -0.1760
从输出中可以看出,函数 sin(x)
应用于单元格的每个元素,结果存储在变量 output
中。查看此链接以获取有关 cellfun()
的更多信息。