【问题标题】:the size problem during assignment of 3D-matrix分配 3D 矩阵时的尺寸问题
【发布时间】:2019-04-29 11:13:34
【问题描述】:

有两个问题。

---1---

我可以毫无问题地将一个较小的矩阵分配给一个较大的零矩阵,如下所示:

a = zeros(5,5,2);
b = [1 2 3];
a = b;

所以我尝试将 RawData 从文件加载到 3D 矩阵:

G = ["/Users/ripfreeworld/Documents/MATLAB/RawData/G01.txt",
    "/Users/ripfreeworld/Documents/MATLAB/RawData/G02.txt",
    "/Users/ripfreeworld/Documents/MATLAB/RawData/G03.txt",
    "/Users/ripfreeworld/Documents/MATLAB/RawData/G04.txt"];
rawdata = zeros(1500,200,4);
for i = 1 : 4
    rawdata(:,:,i) = load(G(i),'ascii');
end

它在第一次迭代时卡住了,没有从加载函数中获取任何数据。

然后我用 zeros() 注释了该行。第一次迭代成功。和之前的简单代码有什么区别?

---2--- 第二个问题是:

无法执行赋值,因为左边的大小是 1440×152,右侧大小为 1440×151。

我发现有一个额外的列填充了“0”。这次我手动删除了这一列,但是有什么方法可以保留 3d 形式(立方体矩阵?),通过自动用“0”填充较小矩阵的列/行或丢弃额外列/行中的数据更大的矩阵?

谢谢!

【问题讨论】:

  • 您的第一个代码块完全错误。您不会“分配给更大的矩阵”,而是覆盖它。在分配b 之前和之后检查a 的大小:它已从5,5,2 更改为1,3
  • 无法访问实际数据,很难回答您的任何问题。更具体并发布每个人都可以遵循的示例代码将大有帮助
  • 谢谢阿德里安,你是对的!它正在覆盖

标签: matlab matrix


【解决方案1】:

感谢 Adriaan,第一个问题是通过覆盖错误的测试开始的。 对于第二个问题,我找到了一个类似的简单解决方案

p=zeros(5,10)*1/0;
for i=1:5
    for m=1:10
        if isprime((i-1)*10+m-1)
           p(i,m)=(i-1)*10+m-1;
        end
    end
end
>> p

p =

   NaN   NaN     2     3   NaN     5   NaN     7   NaN   NaN
   NaN    11   NaN    13   NaN   NaN   NaN    17   NaN    19
   NaN   NaN   NaN    23   NaN   NaN   NaN   NaN   NaN    29
   NaN    31   NaN   NaN   NaN   NaN   NaN    37   NaN   NaN
   NaN    41   NaN    43   NaN   NaN   NaN    47   NaN   NaN

【讨论】:

  • 你可以用nan(5,10)初始化p。无需除以 0!
猜你喜欢
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多