NumPy基本操作(一)

相关知识

NumPy简介

NumPy是用Python进行科学计算的基本软件包。它包含以下内容:

  • 一个强大的N维数组对象
  • 复杂的(广播)功能
  • 用于集成C/C++和Fortran代码的工具
  • 有用的线性代数,傅里叶变换和随机数能力
  • 用于读写磁盘数据以及操作内存映射文件的工具

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按年龄进行排序,如年龄相同按身高排序。

猜你喜欢

转载自blog.csdn.net/ITYTI/article/details/86160732