我正在做一些统计工作,我有一个(大)随机数集合来计算平均值,我想使用生成器,因为我只需要计算均值,所以我不需要存储数字.
问题是numpy.mean如果你把它传给发电机就会中断.我可以写一个简单的函数来做我想要的,但我想知道是否有一个正确的,内置的方法来做到这一点?
如果我能说"sum(values)/ len(values)"会很好,但是len不适用于genetators,并且总和已经消耗的值.
这是一个例子:
import numpy
def my_mean(values):
n = 0
Sum = 0.0
try:
while True:
Sum += next(values)
n += 1
except StopIteration: pass
return float(Sum)/n
X = [k for k in range(1,7)]
Y = (k for k in range(1,7))
print numpy.mean(X)
print my_mean(Y)
Run Code Online (Sandbox Code Playgroud)
这两个都给出相同,正确,答案,买my_mean不适用于列表,numpy.mean不适用于生成器.
我真的很喜欢使用发电机的想法,但这样的细节似乎破坏了事情.
Python(scipy.stats.hmean
)中的Harmonic Mean函数要求输入为正数.
例如:
from scipy import stats
print stats.hmean([ -50.2 , 100.5 ])
Run Code Online (Sandbox Code Playgroud)
结果是:
ValueError: Harmonic mean only defined if all elements greater than zero
Run Code Online (Sandbox Code Playgroud)
我没有在数学上看到为什么会出现这种情况,除了罕见的情况,你最终将除以零.不是检查除以零,而是hmean()
在输入任何正数时抛出错误,无论是否可以找到调和平均值.
我在数学中遗漏了什么吗?或者这真的是一个限制SciPy
吗?
你如何找到一组数字的调和平均值,这些数字在python中可能是正数还是负数?
我使用QuickCheck-2.5.1.1进行QA.我测试两个纯函数gold :: a -> Float
和f :: a -> Float
,其中a
实例随心所欲.
这gold
是参考计算,f
是我正在优化的变体.
到目前为止,我使用quickcheck的大多数测试都使用了类似的测试\a -> abs (gold a - f a) < 0.0001
.
但是,我想收集统计数据并检查阈值,因为知道平均误差和标准偏差对指导我的设计很有用.
有没有办法使用QuickCheck来收集这样的统计数据?
为了给出我正在寻找的那种东西的具体例子,假设我有以下两个函数来近似平方根:
-- Heron's method
heron :: Float -> Float
heron x = heron' 5 1
where
heron' n est
| n > 0 = heron' (n-1) $ (est + (x/est)) / 2
| otherwise = est
-- Fifth order Maclaurin series expansion
maclaurin :: Float …
Run Code Online (Sandbox Code Playgroud) 我有一个pandas DataFrame,包含一些随时间推移的传感器读数,如下所示:
diode1 diode2 diode3 diode4
Time
0.530 7 0 10 16
1.218 17 7 14 19
1.895 13 8 16 17
2.570 8 2 16 17
3.240 14 8 17 19
3.910 13 6 17 18
4.594 13 5 16 19
5.265 9 0 12 16
5.948 12 3 16 17
6.632 10 2 15 17
Run Code Online (Sandbox Code Playgroud)
我编写了代码,用每列的方法添加另一行:
# List of the averages for the test.
averages = [df[key].describe()['mean'] for key in df]
indexes = df.index.tolist()
indexes.append('mean')
df.reindex(indexes)
# Adding …
Run Code Online (Sandbox Code Playgroud) 我想从下面显示的两列中计算一个mean
和standard deviation
一个timedelta
银行dataframe
.当我运行代码(也显示如下)时,我得到以下错误:
pandas.core.base.DataError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)
我的数据帧:
bank diff
Bank of Japan 0 days 00:00:57.416000
Reserve Bank of Australia 0 days 00:00:21.452000
Reserve Bank of New Zealand 55 days 12:39:32.269000
U.S. Federal Reserve 8 days 13:27:11.387000
Run Code Online (Sandbox Code Playgroud)
我的代码:
means = dropped.groupby('bank').mean()
std = dropped.groupby('bank').std()
Run Code Online (Sandbox Code Playgroud) 从数据帧的示例开始,最简单的解释是:
TimeStamp 382.098 382.461 383.185 383.548
10:28:00 0.012448 0.012362 0.0124485 0.012362
10:30:00 0.0124135 0.0123965 0.0124135 0.012431
10:32:00 0.0551035 0.0551725 0.055931 0.0563105
10:34:00 0.055586 0.0557245 0.056655 0.0569485
10:36:00 0.055586 0.055776 0.0568105 0.057362
Run Code Online (Sandbox Code Playgroud)
我希望我的输出是:
TimeStamp 382 383
10:28:00 0.012405 0.01240525
10:30:00 0.012405 0.01242225
10:32:00 0.05513 0.05612075
10:34:00 0.05565525 0.05680175
10:36:00 0.055681 0.05708625
Run Code Online (Sandbox Code Playgroud)
所以,我想查看列名值,如果它们与整数相同,我希望输出col具有每个时间索引值的平均值.
我的想法是使用df.round将列标题舍入为最接近的整数,然后使用.mean()以某种方式对轴= 0应用相同col标题的均值.但是,我在数据帧索引类型上使用round函数时出错.
编辑:基于答案,我用过
df.rename(columns=dict(zip(df.columns[0:], df.columns[0:]\
.values.astype(float).round().astype(str))),inplace=True)
df = df.groupby(df.columns[0:], axis=1).mean()
Run Code Online (Sandbox Code Playgroud)
它会混淆列名和值,而不是根据col名称给出我的意思......不知道为什么!
id gender status dept var1 var2 salary
0 P001 M FT DS 2.0 8.0 NaN
1 P002 F PT FS 3.0 NaN 54.0
2 P003 M NaN AWS 5.0 5.0 59.0
3 P004 F FT AWS NaN 8.0 120.0
4 P005 M PT DS 7.0 11.0 58.0
5 P006 F PT NaN 1.0 NaN 75.0
6 P007 M FT FS NaN NaN NaN
7 P008 F NaN FS 10.0 2.0 136.0
8 P009 M PT NaN 14.0 3.0 60.0
9 …
Run Code Online (Sandbox Code Playgroud) 我有一个numpy数组,形状为:
(11L, 5L, 5L)
Run Code Online (Sandbox Code Playgroud)
我想计算数组[0,:,],[1,:,]等的每个'切片'的25个元素的平均值,返回11个值.
这看起来很傻,但我无法弄清楚如何做到这一点.我认为这个mean(axis=x)
函数可以做到这一点,但我已经尝试了所有可能的轴组合,但没有一个给我我想要的结果.
我显然可以使用for循环和切片来做到这一点,但肯定有更好的方法吗?
例如:我有A的列表,我想在它的字段a上计算平均值.最好的方法是什么?我找到的愚蠢的解决方案是创建LAverage = new List(),用所有La填充它并调用LAverage.average()
class A
{
int a;
int b;
}
void f()
{
var L = new List<A>();
for (int i=0; i<3; i++)
{
L.Add(new A(){a = i});
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个数据框记录了一个客户花费了多少钱,如下所示:
custid, value
1, 1
1, 3
1, 2
1, 5
1, 4
1, 1
2, 1
2, 10
3, 1
3, 2
3, 5
Run Code Online (Sandbox Code Playgroud)
如何使用mean,max,median,std等计算特征,如下所示?使用一些应用功能?如何?
custid, mean, max,min,median,std
1, ....
2,....
3,....
Run Code Online (Sandbox Code Playgroud)