我需要製作一個scilab/MATLAB程序,用於平均給定大小(N x N x N)的立方體中3D矩陣的值。我始終感謝任何能夠幫助我的人。如何構建平均3D矩陣的Scilab/MATLAB程序?
在此先感謝
我需要製作一個scilab/MATLAB程序,用於平均給定大小(N x N x N)的立方體中3D矩陣的值。我始終感謝任何能夠幫助我的人。如何構建平均3D矩陣的Scilab/MATLAB程序?
在此先感謝
在MATLAB中,mat2cell
和cellfun
是一個非常好的團隊,可以處理N維非重疊塊,因爲我認爲這是個問題。一個示例場景:
A
= [30x30x30]數組bd = [5 5 5]
,立方體的大小B
= [6x6x6]塊的陣列裝置爲了完成上述,解決辦法是:
dims = [30 30 30]; bd = [5 5 5];
A = rand(dims);
f = floor(dims./bd);
remDims = mod(dims,bd); % handle dims that are not a multiple of block size
Ac = mat2cell(A,...
[bd(1)*ones(f(1),1); remDims(1)*ones(remDims(1)>0)], ....
[bd(2)*ones(f(2),1); remDims(2)*ones(remDims(2)>0)], ....
[bd(3)*ones(f(3),1); remDims(3)*ones(remDims(3)>0)]);
B = cellfun(@(x) mean(x(:)),Ac);
如果你需要一個全尺寸輸出無線th平均值的複製,有一個簡單的解決方案,其中涉及'UniformOutput'
選項cellfun
其次是cell2mat
。
如果你想要重疊立方體和輸入相同的大小輸出,你可以簡單地做convn(A,ones(blockDims)/prod(blockDims),'same')
。
編輯:簡化,清晰度,通用性和修復。
N = 10; %Same as OP's parameter
M = 10*N;%The input matrix's size in each dimensiona, assumes M is an integer multiple of N
Mat = rand(M,M,M); % A random input matrix
avgs = zeros((M/N)^3,1); %Initializing output vector
l=1; %indexing
for i=1:M/N %indexing 1st coord
for j=1:M/N %indexing 2nd coord
for k=1:M/N % indexing third coord
temp = Mat((i-1)*N+1:i*N,(j-1)*N+1:j*N,(k-1)*N+1:k*N); %temporary copy
avg(l) = mean(temp(:)); %averaging operation on the N*N*N copy
l = l+1; %increment indexing
end
end
end
的for循環和複製可一旦你索引的要點被淘汰。
'mean(M(:))'其中'M'是矩陣? – Ansari
重疊或不重疊?對於非重疊,使用30x30x30矩陣和5x5x5的立方體,輸出將爲6x6x6。那是你要的嗎? – chappjc