Matlab 将矩阵添加到结构列而不使用for循环?
是否可以在不使用for循环的情况下将矩阵添加到结构“列”中?例如,我有一个包含3个字段的结构Matlab 将矩阵添加到结构列而不使用for循环?,matlab,matrix,vectorization,Matlab,Matrix,Vectorization,是否可以在不使用for循环的情况下将矩阵添加到结构“列”中?例如,我有一个包含3个字段的结构 A.name A.grade A.attendance 现在A.出勤需要1x5矩阵。若我有一个5x5矩阵,我可以直接将它插入结构a的5行吗?差不多 A(1:5).attendance = B 其中B是5x5矩阵您可以将B转换为其行的单元格数组 C = mat2cell(B, ones(size(B,1),1), size(B,2)) 然后你可以分配如下 [A(1:size(B,2)).attend
A.name
A.grade
A.attendance
现在A.出勤
需要1x5矩阵。若我有一个5x5矩阵,我可以直接将它插入结构a的5行吗?差不多
A(1:5).attendance = B
其中B是5x5矩阵您可以将
B
转换为其行的单元格数组
C = mat2cell(B, ones(size(B,1),1), size(B,2))
然后你可以分配如下
[A(1:size(B,2)).attendance] = C{:};
如果
B
实际上是一个5元素的单元格数组,其中每个元素都是一个1×5的矩阵(实际上每个元素可以包含任何内容),那么
会有用的。您可以将5乘5的双矩阵B
转换为所需的形式,如下所示:
B_cell = mat2cell(B, ones(size(B,1),1),size(B,2))
或者跳过temp变量并使用deal
:
[A.attendance] = deal(mat2cell(B, ones(size(B,1),1),size(B,1)))
我只是在想一个解决方案,
deal
:)该死,我不该打那么久;)我认为你不需要A
上的索引,[A.出勤]
应该可以too@Andras实际上,在右手边有一个“隐含的”交易。这曾经是必要的,但现在不再是了@LuisMendo当然,我意识到了一个后验。但一切都太晚了;)@Dan这是个好主意,但前提是a
之前未定义或足够小。如果A
的条目超过大小(B,1)
它将给出一个错误,因此您可以直接在单元格上使用deal
,而无需{:}
。这些东西总是把我弄糊涂@路易斯:我想这正是你所说的:{:}
本身就是一个隐含的交易。显式使用deal
允许您使用完整的单元格,deal
将为您处理。@Andras我这样看:deal
允许您在RHS上使用“手动”定义的逗号分隔列表:[a(1:5)。出席人数]=deal(1,3,5,7,9)代码>。如果没有交易
,这是行不通的。但是如果1,3,5,7,9
列表是从单元格数组C={1,3,5,7,9}
自动生成为C{:}
,那么deal
从Matlab7.0开始就不是必需的,即使C{:}
精确地生成1,3,5,7,9
,洛伦·舒尔的主题如下:只是明确确认一下,我不能将双矩阵直接存储为双矩阵(如问题中所述)在结构中?
[A.attendance] = deal(mat2cell(B, ones(size(B,1),1),size(B,1)))