首页 > 解决方案 > numpy中具有相同数组的数组的项目差异

问题描述

我有一个a数字数组。

rnd = np.random.default_rng(12345)
a = rnd.uniform(0, -50, 5)
# array([-11.36680112, -15.83791699, -39.86827287, -33.81273354,
#       -19.55547753])

我想找到数组与同一数组中每个元素的差异。示例输出将是:

[array([ 0.        ,  4.47111586, 28.50147174, 22.44593241,  8.18867641]),
 array([-4.47111586,  0.        , 24.03035588, 17.97481655,  3.71756054]),
 array([-28.50147174, -24.03035588,   0.        ,  -6.05553933,
        -20.31279534]),
 array([-22.44593241, -17.97481655,   6.05553933,   0.        ,
        -14.25725601]),
 array([-8.18867641, -3.71756054, 20.31279534, 14.25725601,  0.        ])]

我的第一种方法是使用列表理解[i - a for i in a]。但是,由于我的原始数组a非常庞大,并且我有数千个这样a的 s 需要在其中执行相同的操作,因此整个过程变得非常缓慢并且内存消耗很大,以至于 jupyter 内核死亡。

有什么可能的方法可以加快速度吗?

标签: pythonarraysperformancenumpy

解决方案


最简单的方法是使用广播

import numpy as np
rnd = np.random.default_rng(12345)
a = rnd.uniform(0, -50, 5)
a[:, None] - a 

输出:

array([[  0.        ,   4.47111586,  28.50147174,  22.44593241,
          8.18867641],
       [ -4.47111586,   0.        ,  24.03035588,  17.97481655,
          3.71756054],
       [-28.50147174, -24.03035588,   0.        ,  -6.05553933,
        -20.31279534],
       [-22.44593241, -17.97481655,   6.05553933,   0.        ,
        -14.25725601],
       [ -8.18867641,  -3.71756054,  20.31279534,  14.25725601,
          0.        ]])

推荐阅读