使用数组的结构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
- 类别:gydF4y2Ba
- 结构gydF4y2Ba
评论gydF4y2Ba
要发表评论,请点击gydF4y2Ba此处gydF4y2Ba登录到您的MathWorks帐户或创建一个新帐户。gydF4y2Ba