这句话在MatLab中是什么意思

这句话在MatLab中是什么意思,matlab,load,matlab-load,permute,Matlab,Load,Matlab Load,Permute,我知道这与加载一个文件和查找其他同名文件以及附加“_vidX”有关,但第7行的确切含义是什么?只需重写第7行,它应该如何重写: filename = 'SOMETHING'; eval(['load ' filename]); eval(['load ' filename '_vid1']) vid123=permute(vid,[2 1 3]); size(vid) eval(['load ' filename '_vid2']) vid123(:,:,(size(vid123,3)+1)

我知道这与加载一个文件和查找其他同名文件以及附加“_vidX”有关,但第7行的确切含义是什么?

只需重写第7行,它应该如何重写:

filename = 'SOMETHING';
eval(['load ' filename]);

eval(['load ' filename '_vid1'])
vid123=permute(vid,[2 1 3]);
size(vid)

eval(['load ' filename '_vid2'])
vid123(:,:,(size(vid123,3)+1):(size(vid123,3)+size(vid,3)))=permute(vid,[2 1 3]);
size(vid)
它连接了第三维中的两个变量。如果您想理解原始行,只需将end语句放在应该使用的地方,它就会突然变得更具可读性:

vid123=cat(3,vid123,permute(vid,[2 1 3])

使用
end+1:end+size(vid,3)
它将
size(vid,3)
-许多新的切片插入3d矩阵
vid123
只是为了重写第7行它应该如何重写:

filename = 'SOMETHING';
eval(['load ' filename]);

eval(['load ' filename '_vid1'])
vid123=permute(vid,[2 1 3]);
size(vid)

eval(['load ' filename '_vid2'])
vid123(:,:,(size(vid123,3)+1):(size(vid123,3)+size(vid,3)))=permute(vid,[2 1 3]);
size(vid)
它连接了第三维中的两个变量。如果您想理解原始行,只需将end语句放在应该使用的地方,它就会突然变得更具可读性:

vid123=cat(3,vid123,permute(vid,[2 1 3])

使用
end+1:end+size(vid,3)
size(vid,3)
-许多新切片插入3d矩阵
vid123

根据Daniel的回答,您的问题源自这样一个事实,即您不太了解
排列
的工作原理。的目标是重新排列矩阵的维度,但保持矩阵的大小不变。您可以指定要“置换”的矩阵以及一个向量,该向量告诉您哪些输入维度映射到输出维度

什么
permute(见[2 1 3])的意思是输入的第二个维度转到输出的第一个维度。输入的第一个维度转到输入的第二个维度,第三个维度保持不变。这样做的效果是,
vid
是一个3D矩阵,其中每个2D切片/帧都是转置的,同时在最终输出中保持相同数量的切片/帧。您正在交换第二维度和第一维度,这基本上就是转置所做的

因此,第一个load语句通过变量
vid
加载到您的帧中,
vid123
最初有一些帧,其中每个帧被转置-这些帧对应于第一个视频。在此之后,您将加载第二个视频,
vid
将被第二个视频中的帧覆盖。然后将这些帧添加到
vid123
的顶部。因此,您只需将第一帧和第二帧中的帧拼接在一起,进行转置即可创建一个更大的视频

我强烈建议您重新保存此文件,以便两个视频由不同的变量清楚地分开,或者可能有一个包含两个视频的结构。将变量
vid
存储在两个单独的文件中是有问题的

类似这样的方法会奏效:

vid123(:,:,end+1:end+size(vid,3))=permute(vid,[2 1 3]);
load([filename '_vid1']);
vid1 = vid;
load([filename '_vid2']);
vid2 = vid;
clear vid;
save videos;
。。。或者,即使这样也行:

vid123(:,:,end+1:end+size(vid,3))=permute(vid,[2 1 3]);
load([filename '_vid1']);
vid1 = vid;
load([filename '_vid2']);
vid2 = vid;
clear vid;
save videos;

在第一个版本中,两个视频都存储在单独的变量
vid1
vid2
中,而在第二个版本中,两个视频都保存在一个结构中

继续丹尼尔的回答,你的问题是因为你不太清楚
permute
是如何工作的。的目标是重新排列矩阵的维度,但保持矩阵的大小不变。您可以指定要“置换”的矩阵以及一个向量,该向量告诉您哪些输入维度映射到输出维度

什么
permute(见[2 1 3])的意思是输入的第二个维度转到输出的第一个维度。输入的第一个维度转到输入的第二个维度,第三个维度保持不变。这样做的效果是,
vid
是一个3D矩阵,其中每个2D切片/帧都是转置的,同时在最终输出中保持相同数量的切片/帧。您正在交换第二维度和第一维度,这基本上就是转置所做的

因此,第一个load语句通过变量
vid
加载到您的帧中,
vid123
最初有一些帧,其中每个帧被转置-这些帧对应于第一个视频。在此之后,您将加载第二个视频,
vid
将被第二个视频中的帧覆盖。然后将这些帧添加到
vid123
的顶部。因此,您只需将第一帧和第二帧中的帧拼接在一起,进行转置即可创建一个更大的视频

我强烈建议您重新保存此文件,以便两个视频由不同的变量清楚地分开,或者可能有一个包含两个视频的结构。将变量
vid
存储在两个单独的文件中是有问题的

类似这样的方法会奏效:

vid123(:,:,end+1:end+size(vid,3))=permute(vid,[2 1 3]);
load([filename '_vid1']);
vid1 = vid;
load([filename '_vid2']);
vid2 = vid;
clear vid;
save videos;
。。。或者,即使这样也行:

vid123(:,:,end+1:end+size(vid,3))=permute(vid,[2 1 3]);
load([filename '_vid1']);
vid1 = vid;
load([filename '_vid2']);
vid2 = vid;
clear vid;
save videos;
在第一个版本中,两个视频都存储在单独的变量
vid1
vid2
中,而在第二个版本中,两个视频都保存在一个结构中

记录在案:!不要使用
eval(['load'filename'\u vid1'])
最好使用
load([filename'\u vid1'])
仅用于记录:!不要使用
eval(['load'filename'\u vid1'])
最好使用
load([filename'\u vid1'])