【问题标题】:Add numpy array in blockwise以块方式添加 numpy 数组
【发布时间】:2020-12-01 17:47:49
【问题描述】:

我有一个由一些早期代码生成的 numpy 数组,需要逐块添加。 例如,数组 a 有 32 个条目,应该添加新数组 b 有 4 个条目,b[0] 有数字 0-7,b[1] 有 8-15,依此类推。请参阅下面的示例,了解如何手动操作。

import numpy as np
a = np.random.rand(32)
b = np.zeros(4)
b[0] = np.sum(a[0:8])
b[1] = np.sum(a[8:16])
b[2] = np.sum(a[16:24])
b[3] = np.sum(a[24:32])

现在我知道我可以使用 for 循环进行求和,但我希望有更花哨的东西,因为我正在处理相当大的数组。我知道 numpy 强大的切片魔法,所以我想可以使用这样的东西。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    我会使用这样的东西:

    #import random
    import numpy as np
    np.random.seed(11) # random.seed doesnt affect numpy computation as pointed out in the comments 
    
    a = np.random.rand(32)
    b = np.zeros(4)
    a = np.reshape(a, (4,-1))
    b = np.sum(a, axis=1)
    

    【讨论】:

    • -1 是什么意思?
    • reshape 中的一个维度可以是-1。在这种情况下,该值是从数组的长度和剩余的维度推断出来的。在此处填写文档numpy.org/doc/stable/reference/generated/…
    • 这很好用,谢谢。只有微小的改进是使用np.random.seed,因为目前你的种子不会影响numpy,每次运行都会得到不同的结果。请注意,这可能与版本有关,我记得一些库直接使用 random 其内部状态,但至少最近版本的 numpy 会跟踪自己的状态,不受其他包的影响。
    • 谢谢,会相应地更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2022-01-24
    • 2021-06-17
    • 1970-01-01
    • 2021-06-29
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多