Python中的numpy的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Totoro1745/article/details/79243465

2018年的第一篇博客,期末结束后又投入到自己的big project中,有点累想要慢下来思考思考,也想记录记录学习的内容。最近看完吴恩达的深度学习视频,发现numpy的特别之处,给计算提供了很大的便利性,觉得应该好好来学习学习。

一.numpy简介

NumpyPython中科学计算的核心库。它提供一个高性能多维数据对象,以及操作这个对象的工具。

二.numpy的安装

sudo pip install numpy

如无意外,用pip的安装方法可以顺利完成~~
要是你这么不幸,就试试手动吧~

Numpy下载地址:http://sourceforge.net/projects/numpy/files/NumPy

三.numpy的使用

1.导入numpy

import numpy as np

导入时将np作为numpy的别名,这是一种习惯性的用法~
2.基本类型array
array,也就是数组,是numpy中最基础的数据结构,最关键的属性是维度元素类型,在numpy中,可以非常方便地创建各种不同类型的多维数组,并且执行一些基本基本操作,如下:

# 通过给array函数传递Python的序列对象创建数组,如果传递的是多层嵌套的序列,将创建多维数组(下例中的变量c)
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])

# 数组的大小可以通过其shape属性获得
print a.shape                   # (4,)  ——>一维数组
print a.argmax()                # 3
print a.max()                   # 4
print a.mean()                  # 2.5

# 多维数组需加入axis=参数
print c.shape                   # (3,4) ——>二维数组
print c.max(axis=1)

# 使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变
d = a.reshape((2,2))   # 深度学习中利用此方法避免运算中数组错误

# 3x3的浮点型2维数组,并且初始化所有元素值为1
e = np.ones((3, 3), dtype=np.float)

# 创建一个一维数组,元素值是把3重复4次,array([3, 3, 3, 3])
f = np.repeat(3, 4)

np.save('f.npy', f)     # 保存到文件
f = np.load('f.npy')    # 从文件读取

3.数学运算
(1)基础运算

import numpy as np

# 绝对值,1
a = np.abs(-1)

# sin函数,1.0
b = np.sin(np.pi/2)

# tanh逆函数,0.50000107157840523
c = np.arctanh(0.462118)

# e为底的指数函数,20.085536923187668
d = np.exp(3)

# 2的3次方,8
f = np.power(2, 3)

# 点积,1*3+2*4=11
g = np.dot([1, 2], [3, 4])

# 开方,5
h = np.sqrt(25)

# 求和,10
l = np.sum([1, 2, 3, 4])

# 平均值,5.5
m = np.mean([4, 5, 6, 7])

# 标准差,0.96824583655185426
p = np.std([1, 2, 3, 2, 1, 3, 2, 0])

(2)广播
对于array,默认执行对位运算。涉及到多个array的对位运算需要array的维度一致,如果一个array的维度和另一个array的子维度一致,则在没有对齐的维度上分别执行对位运算,这种机制叫做广播(broadcasting),常常在深度学习的视频里听到:

a = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

b = np.array([
    [1, 2, 3],
    [1, 2, 3]
])

'''
维度一样的array,对位计算
array([[2, 4, 6],
       [5, 7, 9]])
'''
a + b

c = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12]
])
d = np.array([2, 2, 2])

'''
广播机制让计算的表达式保持简洁
d和c的每一行分别进行运算
array([[ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])
'''
c + d

(3)线性代数模块
在深度学习相关的数据处理和运算中,线性代数模块(linalg)是最常用的之一。结合numpy提供的基本函数,可以对向量,矩阵,或是说多维张量进行一些基本的运算:

a = np.array([3, 4])
np.linalg.norm(a)

b = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
c = np.array([1, 0, 1])

# 矩阵和向量之间的乘法
np.dot(b, c)                    # array([ 4, 10, 16])
np.dot(c, b.T)                  # array([ 4, 10, 16])

np.trace(b)                     # 求矩阵的迹,15
np.linalg.det(b)                # 求矩阵的行列式值,0
np.linalg.matrix_rank(b)    # 求矩阵的秩,2,不满秩,因为行与行之间等差

(4)random模块
随机模块包含了随机数产生和统计分布相关的基本函数

import numpy.random as random

# 设置随机数种子
random.seed(42)

# 产生一个[0,1)之间的浮点型随机数
random.random()

# 下边4个没有区别,都是按照指定大小产生[0,1)之间的浮点型随机数array,不Pythonic…
random.random((3, 3))
random.sample((3, 3))
random.random_sample((3, 3))
random.ranf((3, 3))

# 产生2x5的标准正态分布样本
random.normal(size=(5, 2))

# 产生5个,n=5,p=0.5的二项分布样本
random.binomial(n=5, p=0.5, size=5)

a = np.arange(10)

# 从a中有回放的随机采样7个
random.choice(a, 7)

# 从a中无回放的随机采样7个
random.choice(a, 7, replace=False)

# 对a进行乱序并返回一个新的array
b = random.permutation(a)

深度学习中涉及挺多微积分知识,滚去继续学习了~

numpy完整学习请查看此链接:http://old.sebug.net/paper/books/scipydoc/numpy_intro.html

猜你喜欢

转载自blog.csdn.net/Totoro1745/article/details/79243465
今日推荐