小编Ott*_*kar的帖子

为什么迭代元素数组乘法在numpy中减慢?

下面的代码再现了我在目前正在实现的算法中遇到的问题:

import numpy.random as rand
import time

x = rand.normal(size=(300,50000))
y = rand.normal(size=(300,50000))

for i in range(1000):
    t0 = time.time()
    y *= x
    print "%.4f" % (time.time()-t0)
    y /= y.max() #to prevent overflows
Run Code Online (Sandbox Code Playgroud)

问题是经过一些迭代后,事情开始逐渐变慢,直到一次迭代所花费的时间比最初多一倍.

放缓的情节 在此输入图像描述

Python进程的CPU使用率在整个时间内稳定在17-18%左右.

我正在使用:

  • Python 2.7.4 32位版本;
  • Numpy 1.7.1与MKL;
  • Windows 8.

python numpy slowdown

14
推荐指数
1
解决办法
753
查看次数

CPU(numpy)和GPU(gnumpy)上的矩阵乘法给出不同的结果

我正在使用gnumpy来加速在GPU上训练神经网络的一些计算.我得到了理想的加速,但有点担心numpy(cpu)和gnumpy(gpu)的结果差异.

我有以下测试脚本来说明问题:

import gnumpy as gpu
import numpy as np

n = 400

a = np.random.uniform(low=0., high=1., size=(n, n)).astype(np.float32)
b = np.random.uniform(low=0., high=1., size=(n, n)).astype(np.float32)

ga = gpu.garray(a)
gb = gpu.garray(b)

ga = ga.dot(gb)
a  = a.dot(b)

print ga.as_numpy_array(dtype=np.float32) - a
Run Code Online (Sandbox Code Playgroud)

它提供输出:

[[  1.52587891e-05  -2.28881836e-05   2.28881836e-05 ...,  -1.52587891e-05
    3.81469727e-05   1.52587891e-05]
 [ -5.34057617e-05  -1.52587891e-05   0.00000000e+00 ...,   1.52587891e-05
    0.00000000e+00   1.52587891e-05]
 [ -1.52587891e-05  -2.28881836e-05   5.34057617e-05 ...,   2.28881836e-05
    0.00000000e+00  -7.62939453e-06]
 ..., 
 [  0.00000000e+00   1.52587891e-05   3.81469727e-05 ...,   3.05175781e-05
    0.00000000e+00  -2.28881836e-05]
 [  7.62939453e-06  -7.62939453e-06 …
Run Code Online (Sandbox Code Playgroud)

python precision cuda numpy

13
推荐指数
1
解决办法
1万
查看次数

标签 统计

numpy ×2

python ×2

cuda ×1

precision ×1

slowdown ×1