数组中数组的总和

时间:2015-09-18 22:47:13

标签: arrays python-2.7 numpy sum

是否有快速的方法来做到这一点;

var x;

function y() {

    // The value is not bound until y is called.
    x = function(z) {
        console.log(z);
    }
}

y();
x('hello');

其中function Y() { var x = function(z) { console.log(z); } return { x: x }; } var y = Y(); y.x('hello'); 是我想要的功能,结果应该是Song::whereHas('writers', function($query){ $query->whereNull('writerField'); }, '=', 0); ,即包含每个输入数组总和的import numpy as np a=np.array([1,2,3,4]) b=np.array([1,2]) c=np.array([a,b]) result=magic(c)

2 个答案:

答案 0 :(得分:2)

以下是建议(答案和评论)及其时间的汇编:

import numpy as np

c = np.array([np.random.rand(np.random.randint(1, 300)) for i in range(50)])

def oliver(arr):
    res = np.empty_like(arr)
    for enu, subarr in enumerate(arr):
        res[enu] = np.sum(subarr)
    return res

def reut(arr):
    return np.array([a.sum() for a in arr])

def hpaulj(arr):
    d = np.concatenate(arr)
    l = map(len, arr)
    i = np.cumsum(l) - l
    return np.add.reduceat(d, i)

他们的时代:

In [94]: timeit oliver(c)
1000 loops, best of 3: 457 µs per loop

In [95]: timeit reut(c)
1000 loops, best of 3: 317 µs per loop

In [96]: timeit hpaulj(c)
10000 loops, best of 3: 94.4 µs per loop

实施@ hpaulj有点棘手,但我认为我得到了它(如果你使用concatenate而不是hstack,这是最快的)

答案 1 :(得分:1)

在许多可能的解决方案中,这是一个:

def your_magic(arr):
    res = np.empty_like(arr)
    for enu, subarr in enumerate(arr):
        res[enu] = np.sum(subarr)
    return res

请记住,制作一个不等长的数组的numpy数组根本不高效,并且与在普通Python列表中添加数组非常相似。这就是上面函数中返回的数组res通常属于dtype object的原因。