Python 科学计算库:Numpy介绍和使用

时间:2022-06-25 03:52:53

一、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:步长 typenumpy数组的数据类型 :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的缺陷:

  1. 标准安装的Python中用列表(list)可以用来当作数组使用,但是列表中所保存的是对象 (任意对象)的指针。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。
  2. Python还提供了一个array模块,它直接保存数值。但是由于它只支持一维数组,也没有各种运算函数,因此也不适合做数值运算。

NumPy提供了以下对象,解决标准Python的不足:
•ndarray( N-dimensional array object)N维数组(简称数组)对象,存储单一数
据类型的N维数组
•ufunc( universal function object)通用函数对象,对数组进行处理的函数。

三、numpy运用

import numpy as np

# 创建numpy数据的几种方法

'''
 1arange()
np.arange(start,end,step,type)
start:开始位置
end:结束位置
step:步长
typenumpy数组的数据类型
: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:在startend之间取的点的个数
 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、例如:创建值全为022列和2行一维数组
zeros = np.zeros((2, 2))
zeros1 = np.zeros((2,))
print(zeros)
print(zeros1)

# 2、创建33列值全为1的数组
ones = np.ones((3, 3))
print(ones)

# 3、创建一个多维的值全为指定某个值得数组
# 例如:22列,值全为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)