簡體   English   中英

拆分、分組和均值:使用 arrays 進行計算

[英]Split, group and mean: computation with arrays

A是給定的N x R xT陣列。 我必須將它水平拆分為N個大小為L x M的子數組,然后將每個z組合在一個數組K中並取一個平均值。

例如: A是數組 rand(N,R,T)= rand( 16, 3,3); 現在我要拆分它:

A=rand( 16, 3 ,3)   :   A(1,:,:), A(2,:,:), A(3,:,:), A(4,:,:), ... , A(16,:,:).

我有 16 片。

B_1=A(1,:,:);  B_2=A(2,:,:);   B_3=A(3,:,:);  ... ; B_16=A(16,:,:);  

下一步是每 3 個組合在一起(例如)。

現在我將創建K_i為:

K_1(1,:,:)=B_1;
K_1(2,:,:)=B_2;
K_1(3,:,:)=B_3;

...
K_8(1,:,:)=B_14;
K_8(2,:,:)=B_15;
K_8(3,:,:)=B_16;

平均數組被發現為:

C_1=[B_1 + B_2 +  B_3]/3
...

C_8= [ B_14 + B_15 + B_16] /3

我已將其實現為:

A_reshape = reshape(squeeze(A), size(A,2), size(A,3),2, []);
mean_of_all_slices = permute(mean(A_reshape , 3), [1 2 4 3]);

Question 1我已經手動檢查過。 它給了我一個錯誤的結果。 如何解決? [解決了]

編輯 2我需要模擬以下計算:

將數組K_i的每個切片與另一個數組P_p取一個乘積:這意味着:

for `K_1` is given `P_1`): `B_1 * P_1` , `B_2 * P_1`, `B_3 * P_1`

...
for `K_8` is given `P_8`): `B_14 * P_8` , `B_15 * P_8`, `B_16 * P_8`

我解決了!!!

免責聲明:這回答了問題的先前版本。

在這種情況下,我建議使用具有可預測行為的內置插件。 在您的情況下,這將是movmean (在 R2016a 中引入):

WIN_SZ = 2;  % Window size for averaging
AVG_DIM = 1; % Dimension for averaging
tmp = movmean(A, WIN_SZ , AVG_DIM ,'Endpoints', 'discard');
C = tmp(1:WINDOW_SZ:end, :, :); % This only selects A1+A2, A3+A4 etc.

如果您的 MATLAB 有點舊,也可以使用卷積( convn ,在 R2006 之前引入)來完成:

WIN_SZ = 3;
tmp = convn(A, ones(WIN_SZ ,1)./WIN_SZ, 'valid'); % Shorter than A in dim1 by (WIN_SZ-1)
C = tmp(1:WINDOW_SZ:end, :, :); % dim1 size is: ceil((size(A,1)-(WIN_SZ-1))/3)

順便說一句,從A的切片創建B的步驟可以使用

B = num2cell(A,[2,3]); % yields a 16x1 cell array of 1x3x3 double arrays

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM