MATLAB:计算巨大数组上的平均值

MATLAB:计算巨大数组上的平均值,matlab,performance,mean,Matlab,Performance,Mean,我需要计算一个巨大数组中所有列的平均值,而首先我必须用零替换所有小于零的数字。以我的玩具为例,很明显这些计算需要花费相当多的时间 tmp = -5 + 10 * rand(5000,100000); tmp(tmp<0) = 0; result = mean(tmp); tmp=-5+10*兰特(5000100000); tmp(tmp在数组中查找值,然后替换它们是一项非常昂贵的操作。相反,请执行以下操作: % slooooooow tic tmp(tmp<0)=0; mean(

我需要计算一个巨大数组中所有列的平均值,而首先我必须用零替换所有小于零的数字。以我的玩具为例,很明显这些计算需要花费相当多的时间

tmp = -5 + 10 * rand(5000,100000);

tmp(tmp<0) = 0;
result = mean(tmp);
tmp=-5+10*兰特(5000100000);

tmp(tmp在数组中查找值,然后替换它们是一项非常昂贵的操作。相反,请执行以下操作:

% slooooooow
tic
tmp(tmp<0)=0;
mean(tmp);
toc

% faaaaaaaaaast
tic
tmp=max(tmp,0);
mean(tmp);
toc

请记住,如果需要单个平均值,则应调用
mean(tmp(:)

在数组中查找值,然后替换它们是一项非常昂贵的操作。相反,请执行以下操作:

% slooooooow
tic
tmp(tmp<0)=0;
mean(tmp);
toc

% faaaaaaaaaast
tic
tmp=max(tmp,0);
mean(tmp);
toc

记住,如果您期望一个平均值,那么应该调用
mean(tmp(:)

你没有只考虑非负数。你是用0代替负数,这是另一回事。而且,你在计算每列的平均值;这就是你想要的吗?@LuisMendo是的,这正是我想要的。换句话说,
a=[-10-10-11]
。你想要“正平均值”对于
a
10.5
,但你这样做是取
[0 0 10 11]
的平均值,即
5.25
。尝试
result=mean(tmp(tmp>=0))
@AnderBiguri我实际上需要将所有负数替换为零,在您的示例中,我将朝向5.25。@AnderBiguri我需要列的平均值,即
result
应该是大小为
1 x 100000
的行向量。您没有只考虑非负数。您正在替换负数e数乘以0,这是另一回事。另外,你在计算每列的平均值;这就是你想要的吗?@LuisMendo是的,这正是我想要的。换句话说,
a=[-10-101011]
。你想要
a
10.5
的“正平均值”,但你这样做的方式是取
[0 10 11]的平均值
5.25
。尝试
result=mean(tmp(tmp>=0))
@AnderBiguri我实际上需要将所有负数替换为零,在您的示例中,我将指向5.25。@AnderBiguri我需要列的平均值,即
result
应该是大小为
1 x 100000
的行向量。