function - Matlab:在结构矩阵上应用函数

标签 function matlab matrix struct apply

我有一个结构矩阵:

s(1:2,1:3) = struct('a',1,'b',2);

我有一个有 2 个 int 输入的函数,并根据 符合某种逻辑。如何使用每个结构体的字段(“a”和“b”)作为函数的输入,在所有矩阵上应用该函数。结果矩阵应与 s 大小相同,只是将函数结果作为数据。

function f = SomeFunctionIWrote(a,b)
    %...Some calculations...
    f = result;
 end

谢谢, 盖伊。

最佳答案

对数组的每个元素应用相同的函数就是arrayfun是为(请参阅 Loren Shure 的 this blog post 以获取有用的讨论/示例)。

如果 f 是您的函数,并且 s 是具有字段 ab 的结构体数组,

result = arrayfun(@(x)f(x.a,x.b), s);

就可以了。 @(x)anonymous function如果您以前没有遇到过这些。

如果函数不返回标量,请使用 'uniformoutput' 选项(设置为 false),以便 result 变为元胞数组。

result = arrayfun(@(x)f(x.a,x.b), s, 'uniformoutput', false); 

注1:arrayfun很慢!通常(总是?)比循环慢。它的优点(根据我的经验/观点)来自于如果/当您的代码发生变化时不必处理矩阵维度的大小/形状,并且更短的代码更易于阅读。

注2:您可以使用'uni'0代替'uniformoutput'false节省打字/行空间,但以牺牲清晰度为代价

关于function - Matlab:在结构矩阵上应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418919/

相关文章:

matlab - 将三角矩阵映射到向量

Swift:比较泛型类中的泛型类型

c - Windows FTP 函数 [C]

python - 将 XML 属性转换为列表,就像在 Python 中使用参数到函数中一样

ios - Swift 枚举函数仅适用于枚举的单个案例?

javascript - 有没有办法重写这个基本函数,这样我就不会重复相同的行两次?

matlab - 图像聚焦和 FFT

matlab - 如何在 Linux 上为 MATLAB 选择硬件 OpenGL 渲染

matlab - 为什么 OpenCV RGB 到 YCbCr 转换的结果与使用 ycbcr2rgb 函数在 matlab 中转换的结果不同?

algorithm - 给定一个由 0 和 1 组成的 m x n 矩阵,如果一个元素为 0,则将其整个行和列设置为 0