我有一个数字数组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/