博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
07 Python之Numpy库
阅读量:1886 次
发布时间:2019-04-26

本文共 3005 字,大约阅读时间需要 10 分钟。

Numpy中文文档

Numpy库

Numpy是高性能科学计算和数据分析的基础包,是Python在科学计算领域使用最广的一个包。

1 ndarray数组基础

Python中用列表保存一组值,可将列表当成是数组使用。此外,Python有array模块,但它不支持多维数组,无论是列表还是array模块都没有科学运算函数,不适合做矩阵等科学计算。因此,numpy没有使用Python本身的数组机制,而是提供了ndarray数组对象,该对象能方便的存取数组,而且拥有丰富的数组计算函数,比如向量的加法、减法、乘法等。

使用ndarray数组,首先需要导入numpy函数库,也可以直接导入该函数库:

from numpy import *

使用别名导入

import numpy as np

1.1 创建数组

创建数组时进行数组计算的先决条件,可以通过array()函数定义数组实例对象,其参数为Python的序列对象(比如列表)。如果想定义多维数组,则传递多层嵌套的序列。

例如下面这条语句定义了一个二维数组,其大小为(2,3),即有2行,3列

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

接着我们看下数组的一些属性:

# 查看行数a.ndim
2
# 查看数组的维数,返回(n,m) 其中n为行数,m为列数a.shape
(2, 3)
# 查看元素的类型,比如numpy.int32  numpy..float64a.dtype
dtype('float64')

1.2 特殊数组

numpy的特殊数组主要有以下几种:

zeros数组:全零数组,元素全为0; ones数组:全1数组,元素权威1; empty数组:空数组,元素全近似为0;
# 全零数组的创建np.zeros((2,3))
array([[0., 0., 0.],       [0., 0., 0.]])
# 全1数组的创建np.ones((3,5))
array([[1., 1., 1., 1., 1.],       [1., 1., 1., 1., 1.],       [1., 1., 1., 1., 1.]])
# 空数组的创建np.empty((3,3))
array([[0.00000000e+000, 0.00000000e+000, 0.00000000e+000],       [0.00000000e+000, 0.00000000e+000, 5.09875747e-321],       [6.95165821e-310, 6.95165821e-310, 6.95181720e-310]])

1.3 序列数组

arange函数:它与Python的range函数相似,但它也属于numpy库,其参数依次为:开始值、结束值、步长。

np.arange(1,20,5)
array([ 1,  6, 11, 16])

我们还可以使用linspace函数创建等差序列数组,其参数依次为:开始值、结束值、元素数量。

np.linspace(0,2,9)
array([0.  , 0.25, 0.5 , 0.75, 1.  , 1.25, 1.5 , 1.75, 2.  ])

1.4 数组索引

numpy数组的每个元素、每行元素、每列元素都可以用索引访问,不过注意:索引是从0开始的。其操作和列表基本相同。

a = np.array([[1,2,4.0],[3,6,9]])a
array([[1., 2., 4.],       [3., 6., 9.]])
# 取a的第一行元素a[0]
array([1., 2., 4.])
# 取a的第二列元素a[:,1]
array([2., 6.])
# 取a的第一行的第三个元素a[0,2]
4.0

1.5 数组运算

a = np.array([1,2,3])b = np.array([4.,5,6])
# 加法运算a + b
array([5, 7, 9])
# 减法运算a - b
array([-3., -3., -3.])
# 乘法运算a * b
array([ 4., 10., 18.])
# 乘法运算:a的2次方a ** 2
array([1, 4, 9], dtype=int32)
# 除法运算a / b
array([0.25, 0.4 , 0.5 ])
# 数组点乘np.dot(a,b)
32.0
# 判断大小,返回bool值a >= 2
array([False,  True,  True])
# a中最大的元素a.max()
3
# a中最小的元素a.min()
1
# a的和a.sum()
6

1.6 数组拷贝

数组的拷贝分为浅拷贝和深拷贝两种,浅拷贝通过数组变量的复制完成,深拷贝使用数组对象的copy方法完成。

浅拷贝只拷贝数组的引用,如果对拷贝对象修改。原数组也将修改。

下面的代码演示了浅拷贝的方法:

a = np.ones((2,3))a
array([[1., 1., 1.],       [1., 1., 1.]])
# b为a的浅拷贝b = ab
array([[1., 1., 1.],       [1., 1., 1.]])
# 对b进行修改,a也会被修改b[1,2] = 9a
array([[1., 1., 1.],       [1., 1., 9.]])

深拷贝会复制一份和原数组一样的数组,但他们在内存中是分开存放的,所以改变拷贝数组,原数组不会改变。

下面的代码演示了b使用copy方法从原数组a复制一份拷贝的情况

a = np.ones((2,3))a
array([[1., 1., 1.],       [1., 1., 1.]])
b = a.copy()b[1,2] = 9b
array([[1., 1., 1.],       [1., 1., 9.]])
a
array([[1., 1., 1.],       [1., 1., 1.]])

矩阵

2.1 创建矩阵

numpy的矩阵对象与数组对象相似,主要不同之处在于,矩阵对象的计算遵循矩阵数学运算规律。矩阵使用matrix函数创建,以(2,2)大小的矩阵为例(2行2列),定义方法如下:

A = np.matrix([[1.0,2.0],[3.0,4.0]])A
matrix([[1., 2.],        [3., 4.]])
# 查看A的类型type(A)
numpy.matrixlib.defmatrix.matrix

2.2 矩阵运算

矩阵的常用运算有转置、乘法、求逆等。下面的代码演示了矩阵的基本运算。

# 转置A.T
matrix([[1., 3.],        [2., 4.]])
B = np.matrix([[3.0],[5.0]])B
matrix([[3.],        [5.]])
# 矩阵乘法A * B
matrix([[13.],        [29.]])
# 逆矩阵A.I
matrix([[-2. ,  1. ],        [ 1.5, -0.5]])

转载地址:http://ddzdf.baihongyu.com/

你可能感兴趣的文章
我的Java后端书架 (2016年暖冬4.0版)
查看>>
每个程序员都必读的10篇文章
查看>>
也谈IO模型
查看>>
谈谈互联网后端基础设施
查看>>
Mybatis的ResultMap的使用
查看>>
Java 异常处理的误区和经验总结
查看>>
Chrome控制台使用详解
查看>>
Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦)
查看>>
15 个必须知道的 Chrome 开发工具技巧
查看>>
推荐的四款产品原型设计工具
查看>>
Spring基础知识汇总 Java开发必看
查看>>
设计模式(一)工厂模式Factory(创建型)
查看>>
Spring - Java/J2EE Application Framework 应用框架
查看>>
Spring - Java/J2EE Application Framework 应用框架 第 1 章 简介
查看>>
Spring - Java/J2EE Application Framework 应用框架 第 3 章 Beans, BeanFactory和ApplicationContext
查看>>
Spring - Java/J2EE Application Framework 应用框架 第 4 章 属性编辑器,数据绑定,校验与BeanWeapper(Bean封装)
查看>>
Spring - Java/J2EE Application Framework 应用框架 第 7 章 事务管理
查看>>
给Java程序猿们推荐一些值得一看的好书
查看>>
JavaScript之数据类型
查看>>
MemCache超详细解读
查看>>