gpt4 book ai didi

python - 在不到一秒的时间内获取巨大矩阵的范数 : NUMPY, PYTHON

转载 作者:行者123 更新时间:2023-11-28 22:48:29 25 4
gpt4 key购买 nike

我有一个形状为 (1 000 000, 100) 的密集矩阵。我想对所有行进行规范。目前我正在使用

import numpy
a = numpy.random.rand((1000000,100))
b = numpy.linalg.norm(a, axis =1) # this takes 2.78 seconds.

有什么方法可以缩短我接受规范的时间?

最佳答案

使用较小的dtype

In [8]: a = numpy.random.rand(1000,1000)

In [9]: %timeit numpy.linalg.norm(a, axis=1)
100 loops, best of 3: 10.4 ms per loop

In [11]: b = numpy.asarray(a, numpy.float32)

In [12]: %timeit numpy.linalg.norm(b, axis=1)
100 loops, best of 3: 3.5 ms per loop

使用优化或并行化的 LAPACK 库可能也有帮助,具体取决于 numpy 版本。

在运行 FreeBSD 10 amd64 的 Intel Core2 Quad (Q9300) 上使用带有 ATLAS 的 numpy 我得到:

In [14]: a =  numpy.random.rand(1000000,100)

In [15]: %timeit -n 10 numpy.linalg.norm(a, axis =1)
10 loops, best of 3: 1.08 s per loop

假设您有一台多核机器,还有另一种加快思维速度的方法;

  • 将数组写入文件
  • 编写一个函数从该文件中读取特定行,对所有数字进行平方和求和并返回结果。
  • 使用 multiprocessing.Pool.map() 在多个进程中运行此函数。
  • map() 返回时,对结果列表求和并取该和的平方根。

加速应该大约等于可用内核的数量。

关于python - 在不到一秒的时间内获取巨大矩阵的范数 : NUMPY, PYTHON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com