小编Ano*_*arZ的帖子

应该使用哪个运算符(+ vs + =)来提高性能?(就地Vs不到位)

假设我在python中有这两段代码:

1 --------------------------
import numpy as np
x = np.array([1,2,3,4])
y = x
x = x + np.array([1,1,1,1])
print y

2 --------------------------
import numpy as np
x = np.array([1,2,3,4])
y = x
x += np.array([1,1,1,1])
print y
Run Code Online (Sandbox Code Playgroud)

我认为y两个例子中的结果都是相同的,因为y指出xx成为(2,3,4,5),事实并非如此

结果是(1,2,3,4) for 1(2,3,4,5) for 2.

经过一些研究,我发现在第一个例子中

#-First example---------------------------------------
x = np.array([1,2,3,4]) # create x --> [1,2,3,4] 
y = x                   # made y point to x …
Run Code Online (Sandbox Code Playgroud)

python performance in-place

11
推荐指数
1
解决办法
533
查看次数

广播是个坏主意吗?(numpy的)

术语广播描述了numpy如何在算术运算期间处理具有不同形状的数组.

Example 1:

from numpy import array 
a = array([1.0,2.0,3.0])
b = array([2.0,2.0,2.0]) # multiply element-by-element ()
a * b
>> array([ 2.,  4.,  6.])

Example 2 :

from numpy import array
a = array([1.0,2.0,3.0])
b = 2.0  # broadcast b to all a
a * b
>>array([ 2.,  4.,  6.])
Run Code Online (Sandbox Code Playgroud)

我们可以将在算术运算期间被拉伸的标量b想象成具有与a相同形状的数组.Numpy足够聪明,可以使用原始标量值,而无需实际制作副本,以便广播操作尽可能具有内存和计算效率(b是标量,而不是数组)

@Eric Duminil另一个内存性能问题中做出的一个小基准测试表明,广播在速度和内存方面存在差异

但是,我引用上面链接的同一篇文章:

有些情况下,广播是一个坏主意,因为它会导致内存的低效使用,从而减慢计算速度

问题是:当广播使用不必要的大量内存并导致性能低下时?换句话说,当我们应该使用混合广播/python循环算法而不是纯粹的广播approch?

python numpy numpy-broadcasting

6
推荐指数
1
解决办法
645
查看次数