Matlab - 在不使用额外内存的情况下切片数组

Matlab - Slicing an Array without using additional memory

我想将一个 4 维数组沿着第 5 维分成 n 个部分,以便在 parfor 中使用它:

X(:,:,:,particles)-->X(:,:,:,particles/n,n)

问题是 X 太大,如果我开始将它写入新变量,我 运行 内存不足,所以我基本上想这样做:

X = cat(5,X(:,:,:,1:particles/n),X(:,:,:,particles/n+1:2*particles/n),...)

我正在使用

sliced = 'cat(5'
for i=1:n
    sliced = strcat(2,sliced,sprintf(',X(:,:,:,(1+(%i-1)*%i):%i*%i)',i,particles/n,i,particles/n))
end
sliced = strcat(2,sliced,')');
X = eval(sliced);

我得到:

Error: The input character is not valid in MATLAB statements or expressions.

如果我打印出 sliced 的内容并注释所有内容,然后将 sliced 的打印输出手动粘贴到 eval('...') 中,它就可以工作。

有人找到了我的问题的解决方案或另一种无需使用额外内存即可对 4D 数组进行切片的方法吗?

谢谢

好的。我只是把事情弄混了 cat 和 strcat 不一样......糟糕 :o

n           = 4;
particles   = 200;
X           = rand(6,6,6,particles);

sliced  = sprintf('X = cat(5'); 

for i = 1:n
     sliced = cat(2,sliced,sprintf(',X(:,:,:,(1+(%i-1)*%i):%i*%i)',i,particles/n,i,particles/n));
end

sliced = cat(2,sliced,sprintf(');'));
eval(sliced);

工作正常。如果有人有更好的切片方法而不使用内存 - 请随时 post...

可以使用reshape,不能占用额外内存-

sz_X = size(X) %// get size
X = reshape(X,sz_X(1),sz_X(2),sz_X(3),sz_X(4)/n,[]); %// reshape and save 
              %// into same variable and as such must be memory efficient