一、Numpy的作用
(1)对于同样的数值计算任务,由于NumPy能够直接对数组和矩阵进行操作,可以省略很多循环语句使用NumPy要比直接编写Python代码便捷得多;
(2)NumPy中数组的存储效率和输入输出性能均远远优于Python中等价的基 本数据结构;
(3)NumPy的大部分代码都是用C语言写成的,这使得NumPy比纯Python代 码高效得多。
二、 NumPy是什么
(1)NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括:
• 一个强大的N维数组对象ndrray;
• 比较成熟的函数库;
• 用于整合C/C++和Fortran代码的工具包;
• 实用的线性代数、傅里叶变换和随机数生成函数
(2)NumPy支持高维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
1、求矩阵之和
a、普通python方法求和
a = []
b = []
c = []
for i in range(3):
a.append(i**2)
b.append(i**3)
c.append(a[i]+b[i])
print(c)
b、用numpy求和
import numpy as np
def numpySun(n):
''' np.arange(start,end,step,type) start:开始位置 end:结束位置 step:步长 type:numpy数组的数据类型 :param n: :return: '''
a = np.arange(0,n,1,np.int64) ** 2
b = np.arange(0,n,1,np.int64) ** 3
c = a + b
return c
c = numpySun(1292)
print(c)
c、 普通python和numpy效率对比
import numpy as np
from datetime import datetime
# import time
def create(n,m):
a = []
for i in range(n):
a.append(i**m)
return a
def pythonSum(n):
a = create(n,2)
b = create(n,3)
c = []
for i in range(n):
c.append(a[i]+b[i])
return c
start = datetime.now()
result = pythonSum(100000)
totaltime = datetime.now() - start
print(result)
print(totaltime.microseconds)
def numpy1(n):
a = np.arange(0,n,1,np.int64) ** 2
b = np.arange(0,n,1,np.int64) ** 3
c = a+b
return c
start1 = datetime.now()
result2 = numpy1(100000)
totaltime = datetime.now() - start1
print(result2)
print(totaltime.microseconds)
标准Python的缺陷:
- 标准安装的Python中用列表(list)可以用来当作数组使用,但是列表中所保存的是对象 (任意对象)的指针。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。
- Python还提供了一个array模块,它直接保存数值。但是由于它只支持一维数组,也没有各种运算函数,因此也不适合做数值运算。
NumPy提供了以下对象,解决标准Python的不足:
•ndarray( N-dimensional array object)N维数组(简称数组)对象,存储单一数
据类型的N维数组
•ufunc( universal function object)通用函数对象,对数组进行处理的函数。
三、numpy运用
import numpy as np
# 创建numpy数据的几种方法
'''
1、arange()
np.arange(start,end,step,type)
start:开始位置
end:结束位置
step:步长
type:numpy数组的数据类型
:param n:
:return:
'''
a = np.arange(5)
# print(a)
# 查看numpy数组的数据类型
print(a.dtype)
'''
2、利用python列表创建numpy数据
np.array(list)
list:python 的列表
'''
price = [12.5, 5.5, 7.0, 13]
price2 = np.array(price)
print(price2)
print(price2.dtype)
'''
3、创建一个从a-b范围内取n个点等间距分布的数组
a = 0
b = 10
n = 4
np.linspace(start,end,points,endpoint)
start:开始
end:结束
points:在start和end之间取的点的个数
endpoint: 创建出的数组是否包含end结束位置,取值为True/False
'''
c = np.linspace(0, 10, 4, endpoint=False)
print(c)
# 查看数组的形状 shape
# (4,) 代表一维
print(c.shape)
d2 = np.array([[1,2,3,4],
[5,6,7,8]])
print(d2.shape)
'''
创建二维数组
'''
d2 = np.array([[1,2,3,4],
[5,6,7,8]])
d2_1 = np.array([np.arange(5),np.arange(5,10)]) print(d2_1)
创建特殊的数组:
# 1、例如:创建值全为0的2行2列和2行一维数组
zeros = np.zeros((2, 2))
zeros1 = np.zeros((2,))
print(zeros)
print(zeros1)
# 2、创建3行3列值全为1的数组
ones = np.ones((3, 3))
print(ones)
# 3、创建一个多维的值全为指定某个值得数组
# 例如:2行2列,值全为10的数组
full = np.full((2, 2), 10)
print(full)
# 4、创建对角矩阵 注意:对角矩阵必须是方阵,即行数和列数相等
eye = np.eye(2)
print(eye)
# 将方阵的对角线上的1向右上角或者是左下角移动
eye2 = np.eye(3,k=1)
print(eye2)