gpt4 book ai didi

matlab - 有没有办法以更简单的方式将 MATLAB 中的多个 2x2 矩阵堆叠到多维数组中(例如,不使用 "cat"或 "reshape")?

转载 作者:行者123 更新时间:2023-12-05 07:02:59 33 4
gpt4 key购买 nike

我每天从某人那里收到一个包含 1000 个大小为 2x2 的矩阵的文本文件,格式如下(此处只显示 3 个矩阵,而不是 1000 个):

0.96875000 0.03125000 
0.03125000 0.96875000

0.96875000 0.01562500
0.03125000 0.98437500

0.99218800 0.03125000
0.00781250 0.96875000

我需要在 MATLAB 中创建一个 2x2x1000 数组。 理想情况下我可以做一些简单的事情,例如:

[0.96875000 0.03125000 
0.03125000 0.96875000;

0.96875000 0.01562500
0.03125000 0.98437500;

0.99218800 0.03125000
0.00781250 0.96875000]

看完MATLAB documentation on multidimensional arraysMATLAB documentation for the cat function ,我发现我可以通过以下方式制作所需的数组(cat 的第一个参数是 3 因为我沿着第 3 个维度连接 2x2 矩阵) :

cat(3,...
[0.96875000 0.03125000
0.03125000 0.96875000],...
[0.96875000 0.01562500
0.03125000 0.98437500],...
[0.99218800 0.03125000
0.00781250 0.96875000])

但是,如果我像上面的“理想”示例那样在行之间放置间距,那行不通,而且在我看来,所有逗号和点的需要使得它有点难看。

在写这个问题时,我发现我可以运行我的“理想”示例,然后使用 reshape,我更喜欢使用 cat 函数的解决方案。为此,我什至不需要分号。然而Cris Luengo correctly pointed out in the comments reshape 还不够,还需要 permute,然后 Luis Mendo pointed out in chat解决方案并不那么简单:

permute(reshape(ideal.',2,2,[]),[2 1 3])

Andras Deak has done我们是什么thought was impossible ,也就是去除转置,但是方案还是比较复杂,工程上也不容易:

permute(reshape(ideal,2,[],2),[1 3 2])

理想情况下,不需要使用 catreshape 来制作 3D 数组,当原始数据已经被很好地格式化为人眼已经可以看到的格式时是几个 2x2 矩阵的 3D 数组。

有没有更简单的方法来使用我拥有的格式的数据在 MATLAB 中构建 3D 数组?

到目前为止,我自己完成了以下工作:

  • 在线搜索并找到上述两篇 MATLAB 文档文章,这些文章使我使用 cat
  • 找到了上述解决方案
  • 在写这个问题时使用 reshape 提出了上述解决方案,然后 Cris 和 Luis 在评论和聊天中改进了 😊。
  • 此外:我尝试将数据保存在 .txt 文件中并在 MATLAB 中单击导入,知道导入 GUI 提供了一些关于如何在生成的 MATLAB 数组中组织数据的选项,但似乎没有任何选项可以使它成为 3D 阵列。

最佳答案

确实没有“直接”方式将此文本导入为 3D 矩阵。这是我能想到的最简单的方法:

  1. 将输入保存为 .txt 文件
  2. 使用导入工具(“变量”工具栏中的“导入数据”按钮)将数据导入为 Mx2 矩阵。选择“数值矩阵”作为“输出类型”。您可以使用“空白单元格”“排除行”以避免出现空行。
  3. 除了 reshape() 和 permute() 之外,使用元胞数组将其格式化如下可能更直观且不易出错。
    % The number of 2x2 matrices
N = size(m,1)/2;
% Split each 2x2 matrix into a cell
c = mat2cell(m, 2*ones(1,N), 1);
% Concatenate along the 3rd dimension
output3DMatrix = cat(3, c{:});

关于matlab - 有没有办法以更简单的方式将 MATLAB 中的多个 2x2 矩阵堆叠到多维数组中(例如,不使用 "cat"或 "reshape")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63404311/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com