Arrays 结构数组-在没有循环的字段中对矩阵执行操作
我有一个名为test的结构数组,其中每个字段都是一个包含矩阵的[1x3]结构数组。我想创建一个新字段levelsq,它对每个矩阵逐元素进行平方运算。我可以通过循环来实现这一点:Arrays 结构数组-在没有循环的字段中对矩阵执行操作,arrays,matlab,struct,Arrays,Matlab,Struct,我有一个名为test的结构数组,其中每个字段都是一个包含矩阵的[1x3]结构数组。我想创建一个新字段levelsq,它对每个矩阵逐元素进行平方运算。我可以通过循环来实现这一点: [test(1:3).level] = deal([1,1],[2,2],[3,3]) for i = 1:3 test(i).levelsq = test(i).level.^2 end test.level ans = 1 1 ans = 2 2 ans = 3
[test(1:3).level] = deal([1,1],[2,2],[3,3])
for i = 1:3
test(i).levelsq = test(i).level.^2
end
test.level
ans =
1 1
ans =
2 2
ans =
3 3
test.levelsq
ans =
1 1
ans =
4 4
ans =
9 9
我已经通过分离和连接元素找到了一些方法,但还不能添加新字段:
temp = num2cell([test.level].^2)
test.levelsq = temp{:}
??? Illegal right hand side in assignment. Too many elements.
然后我尝试重新调整temp变量的形状,但它的形式仍然不正确
temp2= reshape(temp,2,3)'
temp2 =
[1] [1]
[4] [4]
[9] [9]
有没有一种更简单的方法可以做到这一点,而无需循环或分离内容?谢谢
test = arrayfun(@(x) setfield(x, 'levelsq', x.level .^ 2), test);
顺便说一句,如果设置列向量,则可以轻松访问数组的值:
>> [test.level]
ans =
1 2 3
1 2 3
>> [test.levelsq]
ans =
1 4 9
1 4 9
顺便说一句,如果设置列向量,则可以轻松访问数组的值:
>> [test.level]
ans =
1 2 3
1 2 3
>> [test.levelsq]
ans =
1 4 9
1 4 9
<>你可能想考虑你的应用程序需要什么数据类型。您当前使用的是数值数组、单元格数组和结构(双重嵌套结构!) “Matlab”的方法是使用数字数组,即矩阵来完成所有这些。它们是高度优化的,非常有利于数学运算 你可以做:
level = [ 1 1; 2 2; 3 3;];
levelsq = level.^2;
如果您希望一个数据结构同时容纳level
和levelsq
,则可以将两者连接成三维矩阵:
test = cat(3, level, levelsq);
您可以通过调用test(:,:,1)
访问levelsq,并通过调用test(:,:,2)
访问levelsq
另一方面,如果你需要保持你正在使用的数据结构,你不能打败@Serg > P>您可能需要考虑应用程序需要的数据类型。您当前使用的是数值数组、单元格数组和结构(双重嵌套结构!) “Matlab”的方法是使用数字数组,即矩阵来完成所有这些。它们是高度优化的,非常有利于数学运算 你可以做:
level = [ 1 1; 2 2; 3 3;];
levelsq = level.^2;
如果您希望一个数据结构同时容纳level
和levelsq
,则可以将两者连接成三维矩阵:
test = cat(3, level, levelsq);
您可以通过调用test(:,:,1)
访问levelsq,并通过调用test(:,:,2)
访问levelsq
另一方面,如果你需要保持你正在使用的数据结构,你不能打败@Serg 谢谢你的反馈。我最初使用矩阵对问题进行编码,但尺寸非常大(>10),因此我尝试使用结构来重新组织/跟踪所有运动部件。谢谢。谢谢你的反馈。我最初使用矩阵对问题进行编码,但尺寸非常大(>10),因此我尝试使用结构来重新组织/跟踪所有运动部件。谢谢