【问题标题】:numpy array construction with broadcasting带有广播的numpy数组构造
【发布时间】:2019-04-03 08:43:00
【问题描述】:

我想将具有不同但广播兼容数组的数组堆叠在一起。给定 7x5、7x1、1x5 和 1x1 数组,我想做类似的事情

 a475 = mkarr([a75, a71, a15, a11])

其中a455 将是一个 4x7x5 数组。 理想情况下我也希望能够做到

 a2275 = mkarr([[a75, a71], [a15, a11]])

得到一个 2x2x7x5 的数组。

用numpy表达这些操作最简洁的方式是什么?

【问题讨论】:

    标签: python numpy scipy array-broadcasting numpy-ndarray


    【解决方案1】:

    你可以使用np.broadcast_arrays:

    a475 = np.stack(np.broadcast_arrays(a75, a71, a15, a11))
    

    请注意,这会创建原始数组的视图,因此不会占用任何额外的内存。

    【讨论】:

    • 仅供参考:broadcast_arrays 返回一个 list 数组。列表中的数组是原始数组的视图,但只要将返回值转换为单个(更高维)数组(此处使用 np.stack 完成),数据就会被复制。
    • 话虽如此,您的建议符合要求,所以 +1 :)
    • @WarrenWeckesser 是的,这是正确的。我的意思是没有创建额外的中间数组(我假设结果的内存是隐含的)。但是您的说明是正确的,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多