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

numpy中的数字求和数组

岑和风
2023-03-14
问题内容

假设我有一个numpy数组,例如:[1,2,3,4,5,6]和另一个数组:[0,0,1,2,2,1]我想按组对第一个数组中的项求和(第二个数组)并按组号顺序获得n个组的结果(在这种情况下,结果将为[3,9,9])。我该如何在numpy中执行此操作?


问题答案:

有多种方法可以做到这一点,但这是一种方法:

import numpy as np
data = np.arange(1, 7)
groups = np.array([0,0,1,2,2,1])

unique_groups = np.unique(groups)
sums = []
for group in unique_groups:
    sums.append(data[groups == group].sum())

可以对 事物 进行
矢量化处理,以便根本没有for循环,但是我建议不要这样做。它变得不可读,并且将需要几个2D临时数组,如果您有大量数据,则可能需要大量内存。

编辑:这是您可以完全向量化的一种方法。请记住,这可能(并且可能会)比上述版本慢。(也许有更好的方法将其向量化,但是已经晚了,我很累,所以这只是浮现在脑海的第一件事……)

但是,请记住,这是一个不好的例子…在上述循环中,您的确在速度和可读性方面都更好。

import numpy as np
data = np.arange(1, 7)
groups = np.array([0,0,1,2,2,1])

unique_groups = np.unique(groups)

# Forgive the bad naming here...
# I can't think of more descriptive variable names at the moment...
x, y = np.meshgrid(groups, unique_groups)
data_stack = np.tile(data, (unique_groups.size, 1))

data_in_group = np.zeros_like(data_stack)
data_in_group[x==y] = data_stack[x==y]

sums = data_in_group.sum(axis=1)


 类似资料:
  • 我有一个疑问。有没有一种有效的方法来求一个numpy矩阵的所有邻域的和而不使用几个条件? 这是一个例子: 当我运行时,它返回我3,而不是一个错误,因此如果我想将1添加到一个值的所有邻居中,我需要使用很多条件,因为我不能只使用,因为在这种情况下以及在其他情况下,它只返回我一个“假邻居”

  • 返回两个或两个以上数字/数字数组中元素之和。 使用 Array.reduce() 将每个值添加到累加器,并且累加器初始值为 0 。 const sum = (...arr) => [...arr].reduce((acc, val) => acc + val, 0); sum(...[1, 2, 3, 4]); // 10

  • Python3 实例 以下实例为通过用户输入两个数字,并计算两个数字之和: 实例(Python 3.0+)# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com # 用户输入数字 num1 = input('输入第一个数字:') num2 = input('输入第二个数字:') # 求和 sum = flo

  • 问题内容: 假设我有2个矩阵M和N(都具有> 1列)。我也有一个包含2列的索引矩阵I- M代表1列,N代表1列。N的索引是唯一的,但是M的索引可能会出现多次。我要执行的操作是 除了for循环以外,还有其他更有效的方法吗? 问题答案: 为了完整起见,在numpy> = 1.8中,您还可以使用的方法: 除了明显的性能劣势外,它还有两个优点: 将其权重转换为双精度浮点数,将与数组的本机类型一起使用。这使

  • 问题内容: 我在创建numpy数组的numpy数组时遇到问题。我将在一个循环中创建它: 所需结果: 实际结果: 可能吗?我不知道数组的最终尺寸,因此无法使用固定尺寸对其进行初始化。 问题答案: 永远不要在循环中追加数组:与基本的Python相比,这是NumPy非常不擅长的一项操作。这是因为您要对每个数据进行完整复制,这将花费您二次时间。 相反,只需将您的数组附加到Python列表中,并在最后进行转

  • 问题内容: 使用simplejson序列化numpy数组的最有效方法是什么? 问题答案: 我将使用它作为最 方便的 方法(如果我仍在使用,这意味着被Python 2.5或更早版本所卡住; 2.6和更高版本具有一个标准库模块,它们的工作方式相同,所以我当然会使用它如果使用的Python版本支持它;-)。 为了寻求更高的效率,您 可以将 json.JSONEncoder 子类化(在中;我不知道旧版本是