[Python数据科学手册]2.3通用函数

334 阅读2分钟
import numpy as np 
np.random.seed(0)

def compute_reciprocals(values):
    #reciprocal 倒数
    output = np.empty(len(values))
    #np.empty 返回给定形状和类型的新数组,不初始化条目。
    for i in range(len(values)):
        output[i] = 1.0/values[i]
    return output

big_array = np.random.randint(1,100,size=1000000)
# %timeit compute_reciprocals(big_array)
values = np.random.randint(1,10,size=5)
print(compute_reciprocals(values))
print(1.0/values)

# %timeit (1.0/big_array)

np.arange(5)/np.arange(1,6) #可以两个数组之间进行运算

#可以进行多维数组的运算:
x = np.arange(9).reshape((3,3,))
2 ** x #指数运算,2的x次方

#数组的运算
x = np.arange(4)
print(' x      = ',x)
print(' x +  5 = ',x+5)
print(' x -  5 = ',x-5)
print(' x *  2 = ',x*2)
print(' x /  2 = ',x/2)
print(' x // 2 = ',x//2)
print('-x      = ',-x)
print(' x ** 2 = ',x**2) #指数运算符
print(' x %  2 = ',x % 2) #模运算符

-(0.5*x + 1) ** 2

#绝对值
x = np.array([-2,-1,0,1,2])
abs(x)
np.absolute(x)
np.abs(x)
x = np.array([3 - 4j, 4 - 3j, 2 + 0j, 0 + 1j]) #复数,返回的是复数的幅度
#幅度=复数的模长=sqrt(3^2 - 4^2)
np.abs(x)

#三角函数
theta = np.linspace(0,np.pi,3)

print("theta      = ", theta)        
print("sin(theta) = ", np.sin(theta))        
print("cos(theta) = ", np.cos(theta))        
print("tan(theta) = ", np.tan(theta))

#反三角函数
x = [-1, 0, 1]        
print("x         = ", x)        
print("arcsin(x) = ", np.arcsin(x))        
print("arccos(x) = ", np.arccos(x))        
print("arctan(x) = ", np.arctan(x))

#指数和对数
x = [1, 2, 3]        
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, 4, 10]        
print("x        =", x)        
print("ln(x)    =", np.log(x))        
print("log2(x)  =", np.log2(x))        
print("log10(x) =", np.log10(x))

# 有一些特殊的版本,对于非常小的输入值可以保持较好的精度
x = [0, 0.001, 0.01, 0.1]        
print("exp(x) - 1 =", np.expm1(x))        
print("log(1 + x) =", np.log1p(x))

#在scipy.special包含了一些不常见的数学计算

#指定输出
#在进行大量运算时,有时候指定一个用于存放运算结果的数组是非 常有用的。
#不同于创建临时数组,你可以用这个特性将计算结果直接写入到你期望的存储位置。
# 所有的通用函数都可以通过 out 参数来指定计算结果的存放位置:
x = np.arange(5)
y = np.empty(5)
np.multiply(x,10,out=y)
#multiply 乘,相乘
print(y)

# 可以将计算结果写入指定数组的每隔一个元素的位置
y = np.zeros(10)
np.power(2,x,out=y[::2]) #指数运算
print(y)

#聚合
#一个reduce方法会对给定的元素和操作重复执行,直至得到单个的结果
#对 add 通用函数调用 reduce 方法会返回数组中所有元素的和
x= np.arange(1,6)
np.add.reduce(x)
# 对 multiply 通用函数调用 reduce 方法会返回数组中所有元素的乘积:
np.multiply.reduce(x)
# 如果需要存储每次计算的中间结果,可以使用 accumulate
np.add.accumulate(x)
np.multiply.accumulate(x)

#外积
#任何通用函数都可以用 outer 方法获得两个不同输入数组 所有元素对的函数运算结果
x= np.arange(1,6)
np.multiply.outer(x,x)