【问题标题】:What does this statement mean in MatLab这个语句在 MatLab 中是什么意思
【发布时间】:2016-07-04 15:02:37
【问题描述】:
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)

我知道这与加载文件和查找具有相同名称并附加“_vidX”的其他文件有关,但第 7 行究竟是做什么/意味着什么?

【问题讨论】:

  • 仅作记录:eval is evil!
  • 而不是eval(['load ' filename '_vid1']) 更好地使用load([filename '_vid1'])

标签: matlab load matlab-load permute


【解决方案1】:

只是重写第7行应该如何重写:

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

它将第三维中的两个变量连接起来。如果您打算理解原始行,只需将 end 语句放在应该使用的地方,它就会突然变得更具可读性:

vid123(:,:,end+1:end+size(vid,3))=permute(vid,[2 1 3]);

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

【讨论】:

    【解决方案2】:

    继续 Daniel 的回答,您的问题源于您不太了解 permute 的工作原理。 permute 的目标是重新排列矩阵的维度,但保持矩阵的大小不变。您指定要“置换”的矩阵以及告诉您哪些输入维度映射到输出的向量。

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

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

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

    这样的事情会起作用:

    load([filename '_vid1']);
    vid1 = vid;
    load([filename '_vid2']);
    vid2 = vid;
    clear vid;
    save videos;
    

    ...甚至这样也行:

    load([filename '_vid1']);
    s.vid1 = vid;
    load([filename '_vid2']);
    s.vid2 = vid;
    clear vid;   
    save videos;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2021-12-25
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多