python - numpy 中具有相同数组的数组中的项目差异

标签 python arrays performance 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,我需要在其中执行相同的操作,因此整个过程变得非常慢并且内存不足饥饿到了 jupyter 内核死亡的地步。

有什么办法可以加快速度吗?

最佳答案

最简单的方法是使用 broadcasting :

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.        ]])

关于python - numpy 中具有相同数组的数组中的项目差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68781898/

相关文章:

python - 来自管道的 Azure ML 输出

arrays - Swift 4 - FlatMap 不会展平数组

javascript - 连接对象中的两个值

java - JList搜索效率

performance - 一种设计 Web 应用程序系统的可升级方法

python - 如何在 python 中仅拆分和存储一些值?

Python 多处理池没有正确分块

database - 简单/智能,Pythonic 数据库解决方案,可以使用 Python 类型 + 语法吗? (Key/Value Dict, Array, maybe Ordered Dict)

从函数更改 char 数组

.net - 我应该缓存 RNGCryptoServiceProvider/RandomNumberGenerator 实例吗?