Numpy

前言

最近数学建模的比赛需要用上Python,这里的Python速成笔记仅作为学习所用,欢迎大家在评论区多多讨论


Numpy是高性能科学计算和数据分析的基础包。Numpy本身并没有提供多么高级的数据分析功能,理解 Numpuy 数组以及面向数组的计算将有助于你提高处理数据能力。本节内容介绍ndarray数组和矩阵。

一、ndarray数组基础

使用 ndarray 数组,需要导入 Numpy 函数库。
导入方法1:直接导入该函数库:

from numpy import *

导入方法2:指定导入库的别名(在引入多个库的时候,推荐使用这个方法)。

import numpy as np

下面正式进入Numpy的数组世界。如果没有说明,所称数组均为 Numpy 数组对象,与 Python 的列表和 array模块无关。

1.1 创建数组

创建数组是进行数组计算的第一步,可以通过numpy库包内的array()函数定义数组实例对象,其参数为Python 的序列对象,如果想定义多维数组,则传递多层嵌套的序列。
例如下面这条语句定义了一个二维数组,其大小为(2,3),即有2行,3列。

a = np.array([[1,2,3.0],[2,3,4.0]])
print(a)

输出:

[[ 1.  2.  3.]
 [ 2.  3.  4.]]

以下三种操作,可以帮助我们查看数组的一些属性:
① 查看行数使用 ndim

a.ndim

输出:

2

② 查看数组的维数使用shape,返回(n,m), 其中 n 为行数,m 为列数

a.shape

输出:

(2, 3)

③ 查看元素的类型使用dtype,比如 numpy.int32、numpy.float64

a.dtype

输出:

dtype('float64')

1.2 特殊数组

Numpy的特殊数组主要有以下三种:

zeros数组:全零数组,元素全为0;
ones数组:全1数组,元素全为1;
empty数组:空数组,元素全近似为0;

创建方法分别为:
① zeros数组

np.zeros((2,5))

输出:

array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

② ones数组

np.ones((6,7))

输出:

array([[ 1.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.]])

③ empty数组

np.empty((3,3))

输出:

array([[  6.93055009e-310,   6.93055009e-310,   6.93055008e-310],
       [  6.93055008e-310,   6.93055008e-310,   6.93055009e-310],
       [  6.93055008e-310,   6.93055009e-310,   6.93055008e-310]])

1.3 序列数组

① arange函数:属于Numpy 库,其参数依次为:开始值、结束值、步长。

np.arange(1,100,5)

输出:

array([ 1,  6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81,86, 91, 96])

② linspace 函数创建等差序列数组,其参数依次为:开始值、结束值、元素数量。

np.linspace(1,100,5)

输出:

array([   1.  ,   25.75,   50.5 ,   75.25,  100.  ])

1.4 数组索引

Numpy 数组的每个元素、每行元素、每列元素都可以用索引访问。注意:索引是从 0 开始的。
其操作与列表基本相同,以下是三种操作方式:

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

① 取 a 的第一行元素

a[0]

输出:

array([ 1.,  2.,  4.])

② 取 a 的第二列元素

a[:,1]

输出:

array([ 2.,  6.])

③ 取 a 的第一行的第三个元素

a[0,2]

输出:

4.0

1.5 数组运算

以下介绍10种常用运算

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])

⑤ 除法运算

a/b

输出:

array([ 0.25,  0.4 ,  0.5 ])

⑥ 数组点乘

np.dot(a,b)

1X4+2X5+3X6=32
输出:

32.0

⑦ 判断大小,返回 bool 值

a >= 2

输出:

array([False,  True,  True], dtype=bool)

⑧ a中最大的元素

a.max()

输出:

3

⑨ a中最小的元素

a.min()

输出:

1

⑩ a的和

a.sum()

输出:

6

1.6 数组拷贝

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

浅拷贝只拷贝数组的引用,如果对拷贝对象修改。原数组也将修改。
以下是浅拷贝的演示:

a = np.ones((2,3))
print(a)

输出:

[[ 1.  1.  1.]
 [ 1.  1.  1.]]

b 为 a 的浅拷贝

b = a
print(b)

输出:

[[ 1.  1.  1.]
 [ 1.  1.  1.]]

对 b 进行修改,a 也会被修改

b[1,2] = 9
print(a)

输出:

[[ 1.  1.  1.]
 [ 1.  1.  9.]]

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

a = np.ones((2,3))
print(a)

输出:

[[ 1.  1.  1.]
 [ 1.  1.  1.]]

b = a.copy()
b[1,2] = 9
print(b)

输出:

[[ 1.  1.  1.]
 [ 1.  1.  9.]]

print(a)

输出:

[[ 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]])
print(a)

输出:

[[ 1.  2.]
 [ 3.  4.]]

type函数可以查看a的类型

type(a) 

输出:

numpy.matrixlib.defmatrix.matrix

2.2 矩阵运算

矩阵的常用数学运算有转置、乘法、求逆等。分别一一实例讲述。
创建一个矩阵:

b=np.matrix([[4.0,6.0],[2.0,8.0]])
print(b)

输出:

[[ 4.  6.]
 [ 2.  8.]]

① 转置操作

b.T

输出:

matrix([[ 4.,  2.],
        [ 6.,  8.]])

② 矩阵乘法

c=np.matrix([[2.0,2.0],[2.0,2.0]])
b*c

输出:

matrix([[ 20.,  20.],
        [ 20.,  20.]])

③ 逆矩阵

b.I

输出:

matrix([[ 0.4, -0.3],
        [-0.1,  0.2]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值