当前位置: 首页 > 面试题库 >

块均值结构化数组

凌和悦
2023-03-14
问题内容

假设我有一个结构化的学生(字符串)和测验分数(整数)数组,其中每个条目都是特定学生在特定测验中获得的分数。每个学生自然都有这个数组中的多个条目。

import numpy
grades = numpy.array([('Mary', 96), ('John', 94), ('Mary', 88), ('Edgar', 89), ('John', 84)],
                     dtype=[('student', 'a50'), ('score', 'i')])

print grades
#[('Mary', 96) ('John', 94) ('Mary', 88) ('Edgar', 89) ('John', 84)]

如何轻松计算每个学生的平均分数?换句话说,我该如何在“得分”维度中采用数组的均值?我想做

grades.mean('score')

并有脾气暴躁的回报

[('Mary', 92), ('John', 89), ('Edgar', 89)]

但是Numpy抱怨

TypeError: an integer is required

有一个简单的方法可以轻松做到这一点吗?我认为这可能涉及使用具有不同dtype的结构化数组的视图。任何帮助,将不胜感激。谢谢。

编辑

>>> grades = numpy.zeros(5, dtype=[('student', 'a50'), ('score', 'i'), ('testid', 'i'])
>>> grades[0] = ('Mary', 96, 1)
>>> grades[1] = ('John', 94, 1)
>>> grades[2] = ('Mary', 88, 2)
>>> grades[3] = ('Edgar', 89, 1)
>>> grades[4] = ('John', 84, 2)
>>> np.mean(grades, 'testid')
TypeError: an integer is required

问题答案:

NumPy并非旨在将行分组在一起并将聚合函数应用于这些组。你可以:

  • 使用itertools.groupby和重建数组;
  • 使用基于NumPy且擅长分组的Pandas;要么
  • 在测试ID的数组中添加另一个维度(因此,本例将是2x3数组,因为看起来好像有两个测试)。

这是itertools解决方案,但是您可以看到它非常复杂且效率低下。我建议其他两种方法之一。

np.array([(k, np.array(list(g), dtype=grades.dtype).view(np.recarray)['score'].mean())
          for k, g in groupby(np.sort(grades, order='student').view(np.recarray),
                              itemgetter('student'))], dtype=grades.dtype)


 类似资料:
  • 原文:Structured arrays 介绍 结构化数组其实就是ndarrays,其数据类型是由组成一系列命名字段的简单数据类型组成的。 例如: >>> x = np.array([('Rex', 9, 81.0), ('Fido', 3, 27.0)], ... dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4

  • 本文向大家介绍结构化,半结构化和非结构化数据之间的差异,包括了结构化,半结构化和非结构化数据之间的差异的使用技巧和注意事项,需要的朋友参考一下 在大数据方面,我们知道它处理大量数据及其执行。简而言之,我们可以说大数据是一种处理大量数据的事物,并且由于数据量如此之大,因此从广义上讲,根据数据的组织方式定义了三类,即结构化,半结构化和非结构化数据。 现在,根据组织数据的级别,我们可以发现这三种类型的数

  • 我需要设计一个数据结构的想法,它可以在 O(logn)时间内插入、删除和获取平均值(a,b)。getmean(a,b)是[a,b]中所有数字x的算术平均值 我的想法- 一般来说,如果我们将数据存储在像AVL树这样的平衡搜索树中,插入和删除操作可以在O(logn)时间内完成。但是为了在O(logn)时间内求解getmean(a,b),我们需要存储一些额外的信息。为了计算平均值,我们可以做以下操作:

  • tendermint共识引擎将绝大多数节点的所有协议记录到一个区块链中,并在所有节点之间复制。这个区块链可以通过各种rpc端点访问,主要是 /block?height= 获取整个区块,以及 /blockchain?minHeight=_&maxHeight=_ 获取头部列表。但是这些块中究竟存储了什么呢? 规范包含了每个组件的详细描述——这是最好的起点。 要深入了解,请查看 types 包文档。

  • 相比其他区块链的区块,新的区块结构增加了Chain ID,Parent Hash,Child Hash。 成员说明: Chain ID:标记区块属于哪一条链,第一条链的ID为1。左子链ID为当前ID*2,右子链ID为当前ID*2+1。 PreHash:本链前一个区块的哈希值。 Parent Hash:父链区块的哈希值,没有时为空值。 Left Child Hash:左子链的区块哈希值,没有时为空值

  • 好吧,这是一个有趣的经验,我有一个结构我的maven多模块项目的前几个星期。 当我决定使用maven进行构建生命周期管理时,我有两个理由希望选择maven。 a.大多数开发团队都是被划分的,这样每个团队就可以在项目中的单独模块上工作,比如团队-A工作在用户管理系统上,团队-B工作在授权系统上,团队-C工作在文档管理系统上……等等。每个团队都有java开发人员、测试人员、UI专家等。 因此我得出结论