Arrays 结构数组-在没有循环的字段中对矩阵执行操作

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的结构数组,其中每个字段都是一个包含矩阵的[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     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),因此我尝试使用结构来重新组织/跟踪所有运动部件。谢谢