拆分、分组和均值:使用数组计算

Posted

技术标签:

【中文标题】拆分、分组和均值:使用数组计算【英文标题】:Split, group and mean: computation with arrays 【发布时间】:2020-02-28 09:19:51 【问题描述】:

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 我已经手动检查过了。它给了我一个错误的结果。如何解决? [已解决]

EDIT 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`

我已经解决了!!!

【问题讨论】:

想一想如何创建一个输入数组,该数组将清楚地表明结果是您所期望的。然后创建该数组并将您的代码扔给它,看看它是否按预期运行。 我不明白它是如何工作的:如果K_2 = [ B_4 B_5 B_6] 然后K_3 = [ B_7 B_8 B_9] ...K_6 = [ B_16 B_17 B_18]K_8 = [ B_22 B_23 B_24] !!请澄清这一点。跨度> @Dev-iL 我已经解决了,谢谢 【参考方案1】:

免责声明:这回答了以前版本的问题。

在这种情况下,我建议使用具有可预测行为的内置插件。在您的情况下,这将是 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

【讨论】:

我正在使用 R2015 并尝试了 conv 的线路。它不起作用。如果A=rand(12,4,4)C =11 x 4 x 4

以上是关于拆分、分组和均值:使用数组计算的主要内容,如果未能解决你的问题,请参考以下文章

pandas聚合和分组运算之groupby

pandas使用groupby函数agg函数获取每个分组聚合对应的均值(mean)实战:计算分组聚合单数据列的均值计算分组聚合多数据列的均值

使用子查询和分组依据每天计算每个国家/地区的 DAU 平均值

R语言使用dplyr包使用group_by函数summarise函数和mutate函数计算分组下的均值标准差样本个数以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)

pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用mean函数计算所有分组中指定数值变量的聚合平均值即字段在指定分组的平均值([]方括号指定需要计算的数值字段)

LeetCode 0813. 最大平均值和的分组