numpy_learning2(通用函数(向量化操作))

为什么要用向量化操作

例子如下(使用的jupyter运行)

import numpy as np
np.random.seed(0)
# 定义一个取倒数的函数
def compute_reciprocals(values):
    output = np.empty(len(values))
    for i in range(len(values)):
        output[i] = 1 / values[i]
    return output
# Python循环实现
values= np.random.randint(1,10,size=5)
%timeit compute_reciprocals(values)

输出:

1.9 µs ± 9.23 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

# 向量化操作实现
%timeit 1 / values

输出:

957 ns ± 11.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

 可以以看到向量化操作比循环操作要高效的多,且代码量也很少


数组运算

例子如下(使用的jupyter运行)

x = np.arange(-4,1)
print('x =',x)
print('x + 1=',x + 1)
print('x - 1=',x - 1)
print('x * 2=',x * 2)
print('x / 2=',x / 2)
print('x ** 2=',x ** 2)
print('x // 2=',x // 2)
print('x % 2=',x % 2)
print('|x|=',np.abs(x))

 输出:

x = [-4 -3 -2 -1  0]
x + 1= [-3 -2 -1  0  1]
x - 1= [-5 -4 -3 -2 -1]
x * 2= [-8 -6 -4 -2  0]
x / 2= [-2.  -1.5 -1.  -0.5  0. ]
x ** 2= [16  9  4  1  0]
x // 2= [-2 -2 -1 -1  0]
x % 2= [0 1 0 1 0]
|x|= [4 3 2 1 0]

 三角函数

 例子如下(使用的jupyter运行,结果因为机器精度问题不是直接等于0)

# 创建一个角度数组
alpha = np.linspace(-np.pi/2,np.pi/2,3)

sin、cos、tan 

sin = np.sin(alpha)
cos = np.cos(alpha)
tan = np.tan(alpha)
print('sin(alpha):',sin)
print('cos(alpha):',cos)
print('tan(alpha):',tan)

输出:

sin(alpha): [-1.  0.  1.]
cos(alpha): [6.123234e-17 1.000000e+00 6.123234e-17]
tan(alpha): [-1.63312394e+16  0.00000000e+00  1.63312394e+16]

 arcsin、arccos、arctan

print('arcsin(alpha):',np.arcsin(sin))
print('arccos(alpha):',np.arccos(cos))
print('arctan(alpha):',np.arctan(tan))

 输出:

arcsin(alpha): [-1.57079633  0.          1.57079633]
arccos(alpha): [1.57079633 0.         1.57079633]
arctan(alpha): [-1.57079633  0.          1.57079633]

 指数&对数

例子如下(使用的jupyter运行)

x = np.arange(1,4)
print('x = ',x)
print('e^x = ',np.exp(x))
print('2^x = ',np.exp2(x))
print('3^x = ',np.power(3,x))

 输出:

x =  [1 2 3]
e^x =  [ 2.71828183  7.3890561  20.08553692]
2^x =  [2. 4. 8.]
3^x =  [ 3  9 27]
x = [1,np.e,2,4,10]
print('x = ',x)
print('ln(x) = ',np.log(x))
print('log2(x) = ',np.log2(x))
print('log10(x) = ',np.log10(x))

 输出:

x =  [1, 2.718281828459045, 2, 4, 10]
ln(x) =  [0.         1.         0.69314718 1.38629436 2.30258509]
log2(x) =  [0.         1.44269504 1.         2.         3.32192809]
log10(x) =  [0.         0.43429448 0.30103    0.60205999 1.        ]

 指定输出(推荐使用,节省内存)

 例子如下(使用的jupyter运行)

x = np.arange(5)
y = np.empty(5)
np.multiply(x,10,out=y)
print(x)
print(y)

 输出:

[0 1 2 3 4]
[ 0. 10. 20. 30. 40.]

 注:所有通用函数都可以指定输出,若采用直接赋值的方式赋给y,计算机是开辟个内存空间将值存放起来逐一赋值给y,会消耗计算机内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值