【问题标题】:I have a numpy array which contains a number of arrays within. How can I sum all of the arrays within resulting in a single numpy array?我有一个 numpy 数组,其中包含许多数组。如何将其中的所有数组相加得到一个 numpy 数组?
【发布时间】:2019-06-19 17:51:22
【问题描述】:

所以我在这里有点迷路了。我有一个 numpy 数组,其中包含多个数组。我的目标是对大数组内部的所有数组求和,得到一个包含这些求和值的奇异数组。

我已经尝试过使用 np.sum() 但这一步太过分了,并且将返回单个整数值的所有内容相加。

我想要完成的一个例子: a = (数组([1, 2, 3]), 数组([3, 4, 5])) **执行一些步骤,期望的结果是: a = (array([4, 6, 8]))

【问题讨论】:

  • "我有一个 numpy 数组,其中包含多个数组。"什么?所以你的数组的dtype 是对象?请提供minimal reproducible example 注意,a = (array([1, 2, 3]), array([3, 4, 5])) 不是包含多个数组的数组。它是一个包含数组对象的元组。
  • 让我们明确一点 - 这是一个多维数字数组,还是一个包含数组的对象 dtype 数组?区别很重要,但您的描述含糊不清。你读过sumaxis 参数吗?
  • 所有数组的长度是否相同?

标签: python python-3.x numpy


【解决方案1】:

更新:带有矢量化加法的更好解决方案

#!/usr/bin/env python3

import numpy as np

a = (np.array([1,2,3]), np.array([3,4,5]))
print(sum(a))
>>> [4 6 8]

原始的、笨拙的、非 numpyic 的解决方案

#!/usr/bin/env python3
import numpy as np
a = (np.array([1,2,3]), np.array([3,4,5]))  
b = zip(*a) 
c = [sum(arr) for arr in b]
print(c)
>>> [4, 6, 8]
d = np.array(c)
print(d)
>>> [4 6 8]

【讨论】:

  • 你为什么不把数组加起来?为什么使用zip 进行转置,然后使用sum 进行列表理解?只需a[0] + a[1] 甚至sum(a) 就可以了
  • 这适用于任意数量的 np.arrays 吗?说得通! +1 矢量化操作 :-)
  • 谢谢@juanpa.arrivillaga!是的,我最终使用了 sum 函数,因为我有很多子数组工作得很好。谢谢大家的反馈! :)
【解决方案2】:

您可以为此直接使用求和运算。您不需要任何特定的内置函数来执行此任务。

import numpy as np

a = (np.array([1,2,3]), np.array([3,4,5])))
sum = a[0] + a[1]
print('The summation of two sub-arrays: ',sum)

上面的代码被解释后,你会得到这样的结果;

两个子数组的求和:[4 6 8]

【讨论】:

    【解决方案3】:

    你肯定需要遍历 np 列表元素,所以检查这个迭代 pairwise 然后检查这个 sum list's elements

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2017-07-22
      • 2018-12-20
      相关资源
      最近更新 更多