gpt4 book ai didi

matlab - 使用 cellfun 计算单元格的平均值

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:06 28 4
gpt4 key购买 nike

我有一个单元格:

BED4{6,4,4}=[];

eg. BED4{1}{1}{1}
ans =

[8x1 double] [8x1 double] [8x2 double] [8x1 double]

我想计算 mean 就好像它是通过沿着红色箭头的 for 循环:

enter image description here

到目前为止,我必须这样做...

figure('color',[1 1 1])
titles={'Direct care','Housekeeping','Mealtimes','Medication rounds','Miscellaneous care','Personal care'};

for care=1:6
subplot(3,2,care)
clear a m e pci1 pci2 gn
for position=1:4
for patient=1:4
a(:,:,position,patient,care)=cell2mat(BED4{care}{position}{patient});
end
end

m=mean(mean(a(:,1,:,:,care),4),3);
e=mean(mean(a(:,2,:,:,care),4),3);
pci1=mean(mean(a(:,3,:,:,care),4),3);
pci2=mean(mean(a(:,4,:,:,care),4),3);
gn=a(:,5,1,1,care);
if care==1
b={m,e,pci1,pci2,gn}; %store for posterity
end

h=errorbar(gn,m,e,'sr');

set(h,'linestyle','--','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','white',...
'MarkerSize',5);
ylabel('Relative Risk ');
xlabel('Patient contact count');
title(titles{ii})
set(gca,'xtick',0:2:8)
axis([-2 8 0 1])
end

给出:

enter image description here

最佳答案

如果您 reshape 数据以隔离第一个维度(care)会更容易:

C = reshape(BED4, size(BED4, 1), 1);

每一行对应于不同的care值。让我们将每行中的单元格内容堆叠为 3-D 矩阵并获得所需的平均值:

res = cell(size(C, 1), 1);               %// Preallocate memory
for care = 1:size(C, 1)
X = vertcat(C{care, :}); %// Obtain content from row
func = @(k)mean(cat(3, X{:, k}), 3); %// Stacks content and obtains mean
res{care} = arrayfun(func, 1:size(X, 2), 'UniformOutput', 0);
end

生成的元胞数组 res 应包含所有所需的平均值。

关于matlab - 使用 cellfun 计算单元格的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16584047/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com