罗兰在MATLAB的艺术gydF4y2Ba

把想法变成MATLABgydF4y2Ba

请注意gydF4y2Ba

罗兰在MATLAB的艺术gydF4y2Ba已经存档,不会被更新。gydF4y2Ba

使用数组的结构gydF4y2Ba

虽然我已经覆盖这个话题有点过去,似乎是一个不错的时候刷新信息。最近有文章在MATLAB等这一主题相关的新闻组gydF4y2Ba这一个gydF4y2Ba。gydF4y2Ba

内容gydF4y2Ba

最初的问题gydF4y2Ba

假设我有一个结构数组和想找到所有条目的值为4,gydF4y2Ba没有循环gydF4y2Ba之类的gydF4y2Ba[m, n] = (f。h = = 4)gydF4y2Ba。gydF4y2Ba

f (1)。h = (1 2 3 4);f (2)。h = (5 6 7 8);gydF4y2Ba试一试gydF4y2Ba[m, n] = (f。h = = 4);gydF4y2Ba结束gydF4y2Ba

为什么我不能使用吗gydF4y2Ba找到gydF4y2Ba直接声明?让我们看看理解的错误消息。gydF4y2Ba

该指标= lasterror;disp (lerr.message)gydF4y2Ba
错误使用= = > eq太多的输入参数。gydF4y2Ba

输入参数太多了吗?什么gydF4y2Ba是gydF4y2Baf.hgydF4y2Ba吗?对于这个问题,到底是什么gydF4y2BafgydF4y2Ba一遍吗?gydF4y2Ba

fgydF4y2Ba
f = 1 x2结构体数组字段:hgydF4y2Ba

fgydF4y2Ba是一个gydF4y2Ba结构体gydF4y2Ba数组,并gydF4y2Baf.hgydF4y2Ba是一个以逗号分隔的列表。gydF4y2Ba

f.hgydF4y2Ba
= 1 2 3 4岁= 5 6 7 8gydF4y2Ba

选择gydF4y2Ba

把这个清单变成一个MATLAB构建我可以使用,我通常要么包装里面gydF4y2Ba[]gydF4y2Ba或gydF4y2Ba{}gydF4y2Ba。如果我包装gydF4y2Baf.hgydF4y2Ba内部gydF4y2Ba[]gydF4y2Ba,我失去了信息的第一个元素是什么gydF4y2BafgydF4y2Ba什么是第二。gydF4y2Ba

(f.h)gydF4y2Ba
ans = 1 2 3 4 5 6 7 8gydF4y2Ba

包装gydF4y2Baf.hgydF4y2Ba内部gydF4y2Ba{}gydF4y2Ba,我有一个单元阵列。gydF4y2Ba

{f.h}gydF4y2Ba
ans = [1 x4双][1 x4双]gydF4y2Ba

我仍然不能立即使用gydF4y2Ba找到gydF4y2Ba在这个数组或数字函数。gydF4y2Ba

试一试gydF4y2Ba[m, n] = ({f。h} = = 4);gydF4y2Ba结束gydF4y2Ba该指标= lasterror;disp (lerr.message)gydF4y2Ba
错误使用= = > evalin未定义的函数或方法“情商”类型的输入参数“细胞”。gydF4y2Ba

解决方案gydF4y2Ba

我想和我的结构是一种工作,而不需要编写代码太多,没有循环,这就是我理想的一种模式可以重用随着我的问题的发展。这正是gydF4y2BaarrayfungydF4y2Ba旨在帮助。它作用于一个数组的每个元素,我需要告诉它我想操作的一个元素,以及告诉gydF4y2BaarrayfungydF4y2Ba什么数组。gydF4y2Ba

我们先找到结构体数组中的值gydF4y2BafgydF4y2Ba等于4。因为我有2个数组嵌入gydF4y2BafgydF4y2Ba,他们可能都有不同数量的输出,我必须明确状态,输出需要进入一个单元阵列。gydF4y2Ba

[m, n] = arrayfun (@ (x)找到(x.h = = 4), f,gydF4y2Ba“uniformoutput”gydF4y2Ba假)gydF4y2Ba
m = [1] [1 x0双]n = [4] [1 x0双]gydF4y2Ba

这变得更加显而易见的如果我可以另一个数组,gydF4y2BaggydF4y2Ba这是“普通”而不是更少gydF4y2BafgydF4y2Ba。gydF4y2Ba

g = f;g (3)。h = [1 2 17 4];g (4)。h = [1 3 5 17 9 17];(毫克,ng) = arrayfun (@ (x)找到(x.h = = 17), g,gydF4y2Ba“uniformoutput”gydF4y2Ba假)gydF4y2Ba
mg = [1 x0双][1 x0双][1][1 x2双]ng = [1 x0双][1 x0双][3][1 x2双]gydF4y2Ba

一些问题更良性的然而,这将是浪费在单元阵列,然后返回结果将它们解压到一个数值数组,例如,函数gydF4y2Ba马克斯gydF4y2Ba,通常只有一个值作为结果。gydF4y2Ba

[minval, idx] = arrayfun (@ (x)马克斯(x.h), f) [minval idx] = arrayfun (@ (x)马克斯(x.h), g)gydF4y2Ba
minval = 4 8 idx = 4 4 minval = 4 8 17 17 idx = 4 4 3 3gydF4y2Ba

相关的话题gydF4y2Ba

这里有一些相关的博客和MATLAB参考页面的链接。gydF4y2Ba

你的想法gydF4y2Ba

  • 你使用结构体数组吗?gydF4y2Ba
  • 如果是,你使用gydF4y2BaarrayfungydF4y2Ba,或者你使用循环吗?无论你的选择是,你能说更多关于为什么是你的选择吗?gydF4y2Ba
  • 你避免使用结构体数组一起和别的吗?如果是这样,你用的是什么数据表示呢?gydF4y2Ba

让我们看看你的反馈gydF4y2Ba在这里gydF4y2Ba。gydF4y2Ba




使用MATLAB®7.3发表gydF4y2Ba


  • 打印gydF4y2Ba
  • 发送电子邮件gydF4y2Ba

댓글gydF4y2Ba

댓글을남기려면gydF4y2Ba링크gydF4y2Ba를클릭하여MathWorks계정에로그인하거나계정을새로만드십시오。gydF4y2Ba