Python中按特征求和数组

2024-09-30 20:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道什么是最有效的方法来求和数组元素的给定特征。例如,我有1000张数据图,我要找的是某一特定年份疾病(即,按性别、年份、疾病划分的抽签数)的总和(即,抽签数据是按性别、年份、疾病划分的,我希望是每年和疾病的两性数据总和)。在

import numpy as np
year = np.repeat((1980, 1990 , 2000, 2010), 10)
sex = np.array(['male', 'female']*20)
disease = np.repeat(('d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8'), 5)
draws = np.random.normal(0, 1, size=(sex.shape[0], 1000))

对于如何得到一个形状为(21000)的数组有什么想法吗?这个数组包含给定年份的疾病对两性的吸引力之和?我还需要能够在数据不完全一致的情况下做到这一点(有些疾病年份只有一次性行为)。在


Tags: 数据方法importnumpy元素np特征数组
2条回答
import numpy as np
import itertools   
import csv

year = np.repeat((1980, 1990 , 2000, 2010), 10)
sex = np.array(['male', 'female']*20)
disease = np.repeat(('d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8'), 5)
draws = np.random.normal(0, 1, size=(sex.shape[0], 1000))

years=np.unique(year)
diseases=np.unique(disease)

draw_sums = dict(((y,d), draws[(year==y)&(disease==d)].sum(axis=0)) 
                  for y,d in itertools.product(years,diseases))

这就产生了一个dict,将每个(年、疾病)与相应的提取总和相关联。要将draw_sums写入csv,可以执行以下操作:

^{pr2}$

这是一个典型的分组问题,可以使用numpy_indexed包以完全矢量化的方式有效地解决它(免责声明:我是它的作者)

keys, values = npi.group_by((year, disease)).sum(draws)
for key, value in zip(zip(*keys), values):
    print(key, value.shape)

相关问题 更多 >