小编Bal*_*alu的帖子

如何在这个短代码中提高numpy性能?

我试图了解为什么我的一个python脚本比gfortran慢了约4倍,我必须这样做:

import numpy as np

nvar_x=40
nvar_y=10

def fn_tst(x):
    for i in range(int(1e7)):
        y=np.repeat(x,1+nvar_y)
    return y

x = np.arange(40)
y = fn_tst(x)

print y.min(),y.max()
Run Code Online (Sandbox Code Playgroud)

这比以下fortran代码慢大约13倍

module test
integer,parameter::nvar_x=40,nvar_y=10
contains
subroutine fn_tst(x,y)
real,dimension(nvar_x)::x
real,dimension(nvar_x*(1+nvar_y))::y

do i = 1,10000000
   do k = 1,nvar_x
      y(k)=x(k)
      ibeg=nvar_x+(k-1)*nvar_y+1
      iend=ibeg+nvar_y-1
      y(ibeg:iend)=x(k)
   enddo
enddo

end subroutine fn_tst
end module test

program tst_cp
use test
real,dimension(nvar_x)::x
real,dimension(nvar_x*(1+nvar_y))::y
do k = 1,nvar_x
   x(k)=k-1
enddo

call fn_tst(x,y)

print *,minval(y),maxval(y)

stop
end
Run Code Online (Sandbox Code Playgroud)

你能否提出加速python脚本的方法.其他指向numpy良好性能的指针将不胜感激.我宁愿坚持使用python而不是为fortran例程构建python包装器.

谢谢

@isedev,是的,就是这样.1.2s gfortran与6.3s for Python?这是我第一次担心性能,但正如我所说,在我试图加速的代码中,我只能使用Python获得大约四分之一的速度.

对,抱歉代码没有做同样的事情.实际上,您在循环中指示的内容更像我在原始代码中所拥有的内容.

除非我遗漏了什么,否则我不同意最后的陈述:我必须在fn_tst中创建y.和np.repeat只是RHS上的一个术语(将o/p直接放在现有数组中).如果我注释掉np.repeat术语的话很快......

rhs_slow …
Run Code Online (Sandbox Code Playgroud)

python performance fortran numpy

3
推荐指数
1
解决办法
991
查看次数

python中的范围行为和numpy中的arange

有人可以解释下面的'-5'.我对numpy有些新意,但这看起来很奇怪

In [112]: an_int=9

In [113]: an_int/2
Out[113]: 4

In [114]: range(-an_int/2,an_int/2)
Out[114]: [-5, -4, -3, -2, -1, 0, 1, 2, 3]

In [115]: arange(-an_int/2,an_int/2)
Out[115]: array([-5, -4, -3, -2, -1,  0,  1,  2,  3])

In [116]: range(-4,4)
Out[116]: [-4, -3, -2, -1, 0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

python numpy range

2
推荐指数
1
解决办法
369
查看次数

标签 统计

numpy ×2

python ×2

fortran ×1

performance ×1

range ×1