科学计算库——NumPy库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AlexWang30/article/details/88358547

简介

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

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

使用

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引;

ndarray 对象是用于存放同类型元素的多维数组;

ndarray 中的每个元素在内存中都有相同存储大小的区域

   1.NumPy.genfromtxt()可以优雅地处理数据。其中参数是可选的,如下,第一个参数是数据文件的绝对目录,第二个参数表示划分依据,第三个参数是指划分后的数据类型,当然还有很多有用的参数,不再一一列举,读者可以参考相关文档,灵活使用。

#打开某一目录下的文件,并显示

import numpy as np
world_alcohol = np.genfromtxt("world_alcohol.txt", delimiter=",",dtype=str)
print(world_alcohol)
#查看数据类型
print(type(world_alcohol))
#查看帮助文档
print(help(np.genfromtxt))

运行结果如下:

   2.定义数组和矩阵并显示维度

vector=np.array([1,2,3,4])
print(vector.shape)
matrix=np.array([[1,2,3],[4,5,6]])
print(matrix.shape)

 

   3.显示ndarray的某一具体元素

world_alcohol = np.genfromtxt("world_alcohol.txt", delimiter=",",dtype=str,skip_header=1)
a=world_alcohol[2,2]
b=world_alcohol[1,3]
print(a)
print(b)

   4.ndarray矩阵

matrix=np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9],
    [10,11,12]
])
#进行相关判断
second_col=(matrix[:,0]==10)
print(second_col)
#此时second_col可用作索引
print(matrix[second_col,:])

显示结果如下:

   5.ndarray的与或

vector=np.array([8,10,15,40])
numequal1=(vector==10)&(vector==15)
numequal2=(vector==10)|(vector==15)
print(numequal1)
print(numequal2)

结果显示如下:

   

vector=np.array([8,10,15,40])
numequal=(vector==10)|(vector==15)
#此时numequal可用作索引
vector[numequal]=25
print(vector)

显示结果如下:

   6.ndarray下的矩阵行或列相加

matrix=np.array([
    [12,13,48],
    [23,47,13],
    [5,6,7]
])
#矩阵行相加结果
print(matrix.sum(axis=1))

显示结果为:[73,83,18]

matrix=np.array([
    [12,13,48],
    [23,47,13],
    [5,6,7]
])
#矩阵列相加结果
print(matrix.sum(axis=0))

结果读者可以自行验证。

   7.arange与reshape

#生成0-14放在nadrray里
print(np.arange(15))
#把a变成3行5列的矩阵
a=np.arange(15).reshape(3,5)
print(a)
#显示a的行列
print(a.shape)
#显示a的维度
print(a.ndim)
#显示a的是数据类型名称
print(a.dtype.name)
#显示a的数据元素个数
print(a.size)

结果显示如下:

下面的语句的意思是生成10到20(不含20)步长为2的数字,结果读者可自行验证。 

np.arange(10,20,2)

 

   8.linspace

下面的语句表示从0到2*pi平均生成100个数

from numpy import pi
np.linspace(0,2*pi,100)

结果如下:

   9.ndarray的四则运算

直接上代码,根据运行结果读者自行揣度原理。

a=np.array([2,5,6,9])
b=np.arange(4)
print(a)
print(b)
print(a+b)
print(a-b)
print(b**2)
print(a<6)

结果如下:

a=np.array([[1,1],[0,1]])
b=np.array([[2,0],[3,4]])
#两个矩阵对应元素相乘
print(a*b)
#下面两种是矩阵相乘的不同用法
print(a.dot(b))
print(np.dot(a,b))

 结果如下: 

 

   10.numpy.random.random(())与reval()函数

numpy.random.random(())可以随机生成区间为(0,1)的数据类型为float的数

#向下取整,随机生成
b=np.floor(10*np.random.random((3,4)))
print(b)
#拉直成向量
c=b.ravel()
print(c)
#在这里-1与2结果相同
c.shape=(6,-1)
print(c)
#矩阵的转置
print(c.T)

运行结果如下:

   11 .矩阵的合并与分裂

a=np.floor(10*np.random.random((2,2)))
b=np.floor(10*np.random.random((2,2)))
print(a)
print(b)、
#矩阵行级合并
print(np.hstack((a,b)))
#矩阵的列级合并
print(np.vstack((a,b)))

运行结果如下:

a=np.floor(10*np.random.random((2,12)))
print(a)
#矩阵的行级分裂
#矩阵平均分裂
print(np.hsplit(a,3))
#矩阵指定位置分裂
print(np.hsplit(a,(3,4)))
b=np.floor(10*np.random.random((12,2)))
#矩阵的列级分裂
print(np.vsplit(b,3))

 结果读者可以自行验证。

    12.numpy库的"复制"

(1)"=",b相当于a的别名,id也相同

a=np.arange(12)
b=a
print(b is a)
b.shape=(3,4)
print(a.shape)
print(id(a))
print(id(b))

运行结果:

(2)view(),也称为浅度复制,id不同,但是共享数据

c=a.view()
print(c is a)
c.shape=(2,6)
c[0,1]=1234
print(a)
print(c)
print(id(a))
print(id(c))

运行结果:

(3)copy(),也称为深度复制,id不同,数据也不是共享的。

d=a.copy()
print(d is a)
d[0,1]=9999
print(a)
print(d)
print(id(a))
print(id(d))

运行结果

   12.关于索引(argmax的用法)

data=np.sin(np.arange(20)).reshape(5,4)
print(data)
#找出每一列最大的数字的索引
index=data.argmax(axis=0)
print(index)
#利用索引输出每列最大的数字
data_max=data[index,range(data.shape[1])]
print(data_max)

运行结果: 

    13.numpy.tile()

此函数可以把数组沿各个方向复制,比如 a是一个一维数组,    np.tile(a,(2,1))就是把a先沿x轴(就这样称呼吧)复制1倍, 再把结果沿y方向复制2倍。

a=np.arange(0,40,10)
print(a)
b=np.tile(a,(3,5))
print(b)

运行结果如下:

   14.排序

a=np.array([[4,3,5],[1,2,1]])
print(a)
#列级排序
b=np.sort(a,axis=0)
print(b)
#行级排序
a.sort(axis=1)
print(a)
a=np.array([4,3,1,2])
#按从小到大的顺序找出一维数组的索引
j=np.argsort(a)
print(j)
#这样可以按索引由小到大输出
print(a[j])

  结果运行如下:

总结

NumPy的学习就先告一段落,日后如果需要,可以补充交流。

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

 

猜你喜欢

转载自blog.csdn.net/AlexWang30/article/details/88358547