Arrays 高效过滤MATLAB结构阵列?
假设我在MATLAB中有一个结构数组:Arrays 高效过滤MATLAB结构阵列?,arrays,matlab,struct,vectorization,slice,Arrays,Matlab,Struct,Vectorization,Slice,假设我在MATLAB中有一个结构数组: a= struct('a1',{1,2,3},'a2',{4,5,6}) 如何有效地(即使用矢量化代码)过滤结构的元素,使其满足某些布尔属性 例如: 如何创建一个新的结构数组b,其元素是a的子集,其中和a1都是3的倍数和a2都是3的倍数?预期结果是一个大小为1的结构数组,其元素为struct('a1',3',a2',6) 我如何创建一个新的结构数组b,其元素是a的子集,其中a1是奇数或a2是3的倍数?预期结果是以下大小为2的结构数组:struct('a1
a= struct('a1',{1,2,3},'a2',{4,5,6})
如何有效地(即使用矢量化代码)过滤结构的元素,使其满足某些布尔属性
例如:
b
,其元素是a
的子集,其中和a1
都是3的倍数和a2
都是3的倍数?预期结果是一个大小为1的结构数组,其元素为struct('a1',3',a2',6)
b
,其元素是a
的子集,其中a1
是奇数或a2
是3的倍数?预期结果是以下大小为2的结构数组:struct('a1',{1,3},'a2',{4,6})
您可以通过mod(…)函数以及正确使用括号和引用来解决此问题。考虑
Mod(x,3)
如果您的数字是3的倍数,将返回零<如果x为奇数,则code>mod(x,2)将返回1[a.a1]
来获取向量中的所有a1
或a2
值。只需键入a.a1,就会造成混乱a=a([13]),从a
结构中过滤我们的代码
或通过写入a=a(逻辑([1 0 1])
来获得相同的结果&
用于逻辑and,将|
用于逻辑or()%% Part 1:
a= struct('a1',{1,2,3},'a2',{4,5,6});
logForA1isMod3 = (mod([a.a1], 3) == 0);
logForA2isMod3 = (mod([a.a2], 3) == 0);
a = a(logForA1isMod3 & logForA2isMod3);
%% Part 2:
a= struct('a1',{1,2,3},'a2',{4,5,6});
logForA1isOdd = (mod([a.a1], 2) == 1);
a = a(logForA1isOdd | logForA2isMod3);