NumPy简介
NumPy是用Python进行科学计算的基本软件包。它包含以下内容:
NumPy是一个用python实现的科学计算包。包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
numpy的核心结构:ndarray(多维数组)
NumPy中创建数组的方法如下表:
NumPy.ndarray属性
NumPy.ndarray函数
1.打开终端模拟器,在命令行输入ipython notebook --ip='127.0.0.1',在浏览器中会打开jupyter界面,点击New,在其下拉框中选择Python3.
2.新建一个ipyt文件,用于编写并执行代码。
3.ndarray的属性
import numpy as np
a=np.arange(15).reshape(3,5)
a
#使用shape查看a的形状
a.shape
#使用ndim查看a的维数
a.ndim
#使用dtype查看a的数据类型
a.dtype.name
#查看数组a的元素个数
a.itemsize
type(a)
创建数组ndarray
4.array():将列表、元组转化成ndarray,使用array创建数组,数组的类型是由列表中元素的类型决定。
import numpy as np
a=np.array([2,3,4])
a
#查看数组a的数据类型
a.dtype
b=np.array([1.2,3.5,5.1])
#查看数组b的数据类型
b.dtype
5.使用array函数将元组转化成数组。
array1=np.array(((1,2,3),(2,3,4)))
print(array1)
6.array创建数组时,可以定义数据的类型
c=np.array([[1,2,3],[1.2,3.5,6]],dtype=np.float64)
print(c)
7.zeros():创建全为0的数组,使用zeros函数创建一个全为0的3行4列数组。
array_zeros=np.zeros((3,4))
print(array_zeros)
8.ones():创建全为1的数组,使用ones函数创建一个全是1的形状为(2,3,4)的3维数组,数据类型为int16.
array_ones=np.ones((2,3,4),dtype=np.int16)
print(array_ones)
9.empty():创建随机数组,使用empty函数创建一个形状为(2,3)的随机数组,它的元素值是随机的,以内存的状态决定。
array_empty=np.empty((2,3))
print(array_empty)
10.arange():创建的NumPy数组,使用Numpy中类似于range的函数arange,创建一个从10到30间隔为5的数值序列,结果返回到一个数组中。
array_arange=np.arange(10,30,5)
print(array_arange)
11.linspace():创建NumPy数组,使用Numpy中的linspace函数创建一个从0到2间隔为9的浮点类型数值序列,结果返回到一个数组中。
array_linspace=np.linspace(0,2,9)
print(array_linspace)
12.asarray():Numpy.asarray类似于numpy.array,从已知数据中构造数组。使用asarray函数将列表[1,2,3]转换成数组,并定义数据类型为float64。
x=[1,2,3]
a=np.asarray(x,dtype=np.float64)
print(a)
13.identity():用于创建单位矩阵,使用identity创建3维单位矩阵。
array_identity=np.identity(3)
print(array_identity)
14.diag():用于创建对角矩阵。使用diag函数创建[1,2,3]的对角矩阵。
array_diag=np.diag([1,2,3])
print(array_diag)
15.random.randint():用于创建随机整数数组。使用random.randint函数创建一个取值由0到50之间的5个整数组成的一维数组。
array_randint=np.random.randint(0,50,5)
print(array_randint)
使用random.randint函数创建一个 3行5列,15个介于0和50之间的整数的数组。
array_randint2=np.random.randint(0,50,(3,5))
print(array_randint2)
16.random.rand():用于创建取值为0到1之间的随机小数数组。使用random.rand函数创建大小为10的1维数组。
array_rand=np.random.rand(10)
print(array_rand)
17.random.standard_normal():用于从标准正态分布中随机抽样。使用random.standard_normal函数创建一个大小为5的一维数组.
array_standard_normal=np.random.standard_normal(5)
print(array_standard_normal)
使用random.standard_normal函数创建一个形状为(3,4,2)的3为数组。
array_standard_normal3=np.random.standard_normal(size=(3,4,2))
print(array_standard_normal3)
数组变形操作
18.使用ravel函数来实现展平操作。
array1=np.array([[[0,1,2,3],[4,5,6,7],[8,9,10,11]],[[12,13,14,15],[16,17,18,19],[20,21,22,23]]])
array1.ravel()
19.flatten,功能与ravel函数相同,不过flatten会请求分配内存来保存结果,而ravel函数只是返回数组的一个视图
array1=np.array([[[0,1,2,3],[4,5,6,7],[8,9,10,11]],[[12,13,14,15],[16,17,18,19],[20,21,22,23]]])
array1.flatten()
20.shape函数用于设置数组维度,给其赋予一个元组数值,修改的是数组本身。
array1=np.array([[[0,1,2,3],[4,5,6,7],[8,9,10,11]],[[12,13,14,15],[16,17,18,19],[20,21,22,23]]])
array1.shape=(6,4)
print(array1)
21.reshape方法用于修改数组的形状,返回一个修改完的新数组,原来的数组没有被修改。
array1=np.array([[[0,1,2,3],[4,5,6,7],[8,9,10,11]],[[12,13,14,15],[16,17,18,19],[20,21,22,23]]])
array2=array1.reshape(6,4)
print("array1:\n",array1)
print("array2:\n",array2)
22.resize:方法用于修改数组的形状,无返回值,即会对原始多维数组进行修改。
array1=np.array([[1,2,3],[4,5,6]])
array1.resize((3,2))
array1
修改数组元素的值
22.使用arange方法创建数值从0到7的数组,并使用append方法在数组x后新增元素8,并返回新数组,数组x不改变。
x=np.arange(8)
print(x)
np.append(x,8)
print(x)
23.修改数组x本身的值,将数组下标3位置的元素值修改为8
x=np.arange(8)
x[3]=8
print(x)
使用arange函数创建一个1到9的3行3列数组x,使用下标的方式修改x数组本身第0行第2列的元素值为4。
x=np.arange(1,10).reshape(3,3)
x[0,2]=4
print(x)
24.使用insert方法,在指定数组下标位置插入元素,返回新数组,原数组的值不改变。在数组x下标为1的位置插入9,查看返回的新数组。
x=np.arange(8)
np.insert(x,1,9)
25.repeat元素的重复,返回一个新数组。
x = np.arange(8)
x.repeat(2)
26.使用put方法修改指定位置上的元素,将数组x索引为0的位置的元素值改为9。
x.put(0,9)
print(x)
数组与数值运算
27.创建一个大小为5,从1到5的整型一维数组对象x.
x=np.array([1,2,3,4,5])
print(x)
28.数组x与数值2进行相乘运算,查看返回的新数组。
x*2
29.数组x对数值2进行相除运算,查看返回的新数组。
x/2
30.数组x对数值2进行整除运算,查看返回的新数组.
31.数组x对数值3的幂运算,查看返回的新数组。
32.数组x与数值2相加,查看返回的新数组。
33.数组x对数值3进行取余运算,查看返回的新数组。
34.数值2对数组x的幂运算,查看返回结果。
35.数值2对数组x进行除法运算,查看返回结果。
36.数值63对数组x进行整除运算,查看返回结果。
数组与数组的运算
37.使用array函数将元组(1,2,3)创建成数组a,将包含3个列表的元组([1, 2, 3], [4, 5, 6], [7, 8, 9])创建成数组b。
38.数组a与数组b相乘,将包含结果的新数组赋值给c,查看数组c的结果,可以看出数组a与数组b每行对应项相乘。
39.数组c除以数组b,查看结果数组的值,可看出数组c与数组b对应位置的值相除。
40.数组c除以数组a,查看结果数组,可以看出是数组c每行与数组a对应位置的值相除。
41.数组a与数组a相加,查看结果数组,可以看出是对应项相加。
42.数组a与数组a相乘,查看结果数组,可以看出是对应项相乘。
43.数组a与数组a相减,查看结果数组,可以看出是对应项相减。
44.数组a与数组a相除,查看结果数组,可以看出是对应项相除。
转置
45.使用array函数将元组([1, 2, 3], [4, 5, 6], [7, 8, 9])创建成一个数组b.
46.使用T对数组b进行转置,将数组b的行与列的值对换。
47.一维数组转置还是一维数组。创建一个1到4的整型数组a,对a进行转置。
数组排序:列排列np.msort(a),行排列np.sort(a),np.argsort(a)排序后返回下标
48.np.argsort()排序后返回下标,创建一个值为[3,1,2]的数组x,使用argsort函数对数组x进行排序,返回原数组从小到大的元素下标组成的数组index_array。
49.将index_array带入到数组x中,将排序后的数组元素输出。
50.使用sort方法对数组进行原地排序。
51.创建一个数值为[[0, 3, 4], [2, 2, 1]]的2维数组x,使用argsort函数加上参数axis=0对数组x进行纵向排序。
52.使用argsort函数加参数axis=1对数组x进行横向排序。
53.使用sort方法加参数axis=1对数组x进行原地横向排序
54.使用sort方法和参数axis=0对数组x进行原地纵向排序。
55.numpy.sort(a, axis=-1, kind='quicksort', order=None)
参数说明:
a:一个要排序的数组array,
axis:整数或None,如果axis=None,数组在排序之前将被展平,默认axis=-1,将排序按最后一列排序
kind:排序用到的算法,可选项 {‘quicksort’, ‘mergesort’, ‘heapsort’},默认为quicksort
order:要进行排序的区域,
返回:一个与a相同数据类型和形状的数组。
使用numpy中的sort函数,加参数axis=None对数组x进行排序。
56.使用numpy中的sort函数,加参数axis=-1对数组x进行横向排序。
57.使用numpy中的sort函数,加参数axis=1对数组x进行横向排序。
58.使用numpy中的sort函数,加参数axis=0对数组x进行纵向排序。
59.np.msort()相当于np.sort(axis=0),使用numpy中的msort函数,对数组x进行纵向排序。
60.创建姓名、身高、年龄的数组,使用numpy中的sort函数对数组x按年龄进行排序,如年龄相同按身高排序。