Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将矩阵添加到结构列而不使用for循环?_Matlab_Matrix_Vectorization - Fatal编程技术网

Matlab 将矩阵添加到结构列而不使用for循环?

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

是否可以在不使用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)).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)))