NLP学习笔记08---python编程高阶函数使用(numpy数组的创建、索引、装置、文件的操作等)

1.列表推导式

 

列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表

 

它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。

 

列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。

(1)range() 函数

可创建一个整数列表,一般用在 for 循环中。

 

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

 

示例:

>>>range(10)        # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)     # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)  # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)  # 步长为 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]

(2)列表表达式的应用案例

 

list = [x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]
print(list)

他的执行顺序是:

for x in range(1,5)
    if x > 2
        for y in range(1,4)
            if y < 3
                x*y

运行效果:

2.Numpy简介

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

 

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

 

SciPy 是一个开源的 Python 算法库和数学工具包。

 

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

 

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

numpy其实就是一个数组对象

3.Numpy数组的创建、索引、切片、转置

(1)numpy的入门案例

import numpy as np
data = [1, 2, 3, 4, 5]
n = np.array(data * 10)
print(n)
print(n.shape)  # shape方法获取n这个数组的维度
print(n.dtype)  # 获取数组的类型

运行效果:

(2)numpy数组的创建

<1>嵌套序列:由一组等长列表组成的列表

import numpy as np
arr=[[1,2,3,4],[1,2,3,4]]
arr2=np.array(arr)
print(arr2)

效果图:

<2>zeros函数进行指定长度数组的创建

import numpy as np
arr2=np.zeros(10)
print(arr2)

效果图:

<3>ones函数创建数组

import numpy as np
arr2=np.ones((2,3))
print(arr2)

效果图:

<4>arange函数创建数组

import numpy as np
arr2=np.arange(10)
print(arr2)

效果图:

<5>数据类型转换

import numpy as np
arr=np.array([1,3.4,5,8,9])
print(arr)
print(arr.dtype)
print(arr.astype(np.int32))

效果图:

(3)矢量化

numpy的数组通常在不用编写循环的情况下进行批量运算

<1>一维数组

import numpy as np
arr1=np.array([1,2,3,4])
arr2=np.array([2,4,6,8])
print(arr1+arr2)

效果图:

<2>二维数组

import numpy as np
arr1=np.array([[1,2,3,4],[1,2,3,4]])
arr2=np.array([[2,4,6,8],[3,6,9,12]])
print(arr1+arr2)

效果图:

<3>其他运算(以乘法为例)

import numpy as np
arr1=np.array([[1,2,3,4],[1,2,3,4]])
arr2=np.array([[2,4,6,8],[3,6,9,12]])
print(arr1*arr2)

效果图:

<4>numpy数组的广播

import numpy as np
arr1=np.array([[1,2,3,4],[1,2,3,4]])
arr2=arr1*5
print(arr1)
print(arr2)

效果图:

(4)numpy数组的索引和切片

<1>一维数组

import numpy as np
arr=np.arange(10)
print(arr)
print(arr[2])  # 获取arr数组的第2个元素(索引从0开始)
print(arr[4:])  # 获取arr数组的第4个元素开始到结尾的数组
arr[1:3]=11   # 修改数组的元素值(不包含3的位置)
print(arr)

效果图:

<2>二维数组

import numpy as np
arr=np.array([[1,2,3],[4,5,6]])
print(arr[0][1])

效果图:

<3>numpy数组比较运算

import numpy as np
names=np.array(['tony','jack','linda'])
print(names=='jack')

效果图:

<4>numpy数组的花式索引

import numpy as np
arr=np.arange(32).reshape(8,4)
print(arr)
print(arr[[1,5,7,2]])

取出8*4矩阵的第1,5,7,2行组成新的数组

效果图:

(5)数组转置和轴对换

转置是重塑数组的一种特殊形式。常用的方法是T 和transpose

import numpy as np
arr=np.arange(15).reshape(3,5)
print(arr)
print(arr.transpose())

效果图:

4.numpy的文件操作

numpy可以读写磁盘上的文本数据或者是二进制数据

(1)保存为npy格式的文件

主要应用的函数是np.save和np.load,默认情况下数据是以未压缩的原始二进制格式保存在扩展名为.npy文件中

 

import numpy as np
arr=np.arange(10)
np.save('lucky',arr)
print(np.load('lucky.npy'))

 

效果图:

 

 

 

(2)将数据保存为txt格式的文件

import numpy as np
arr=np.arange(10)
np.savetxt('lucky.txt',arr,delimiter=',')
print(np.loadtxt('lucky.txt',delimiter=','))

效果图:

5.numpy的线性代数

dot函数计算矩阵的乘法运算、trace函数计算对角线元素的和、det函数计算矩阵的行列式、eig计算矩阵的特征值和特征向量、inv计算矩阵的逆

 

import numpy as np
x=np.array([[1,2,3],[4,5,6]])
y=np.array([[1,2],[4,5],[7,8]])
print(x.dot(y))

 

效果图:

 

posted @ 2020-04-25 13:56  雨后观山色  阅读(451)  评论(0编辑  收藏  举报