数据处理———numpy库narray的创建和常用函数

本文详细介绍NumPy库中数组的创建方法,如array、zeros、ones、full、eye及arange函数,并介绍常见数组操作,包括数值修改、基本运算、矩阵运算、转置、求极值与平均值及reshape等。

数据处理———numpy库narray的创建和常用函数

在使用numpy库之前必须先导入numpy模块

>>>import numpy as np
  1. 先看如何创建一个数组(narray)对象
    最基础的方法就是直接用array()来创建一个数组对象:
>>>np.array([1,2,3])								 #一维数组
array([1, 2, 3])
>>>np.array([[1,2,3],[4,5,6],[7,8,9]])				#二维数组
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> a=np.array([[1, 2, 3],						
       [4, 5, 6],
       [7, 8, 9]])   
>>>print(a)											
[[1 2 3]											#print后显示出的数组
 [4 5 6]
 [7 8 9]]

还有其他一些特殊的创建方法(zeros,ones,full,eye,arange,):
顾名思义,zeros()与ones()函数就是分别用来创建全是0或全是一的数组,主要参数是数组的shape(后面会讲到),用法如下:

>>>np.zeros(5)								#一维数组直接加上数组的size
array([0.,0.,0.,0.,0.])
>>>np.zeros((3,4))							#多维数组则给定数组的shape
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
>>>np.ones((3,3,3))							#例如用ones()函数创建一个shape为(3,3,3)的全为1三维数组
array([[[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]],

       [[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]],

       [[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]]])

full()函数用来创建指定值的数组,主要参数为shape,fill_value,此外还有dtype用来指定数组所存内容的类型(与python列表不同,一个narray中所存数据必须是同一类型是数据,前面所有创建函数均可给定ntype这个参数,不给定时会有默认值,每个函数默认值可能不同),full用法如下:

>>> np.full((3,4),9)						#创建一个shape为(3,4),数值全为9的数组
array([[9, 9, 9, 9],
       [9, 9, 9, 9],
       [9, 9, 9, 9]])

还有一个特殊narrary的创建函数时eye(),用于创建单位矩阵,用法如下:

>>>np.eye(5)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

arange()函数可以用来创建数组(函数参数为arange([start,] stop[, step,], dtype=None)),与python自带的range函数基本一样,只是多了一个dtype函数,示例如下:

>>>np.arange(5)
array([0, 1, 2, 3, 4])
>>>np.arange(1,11,2)								#step=2
array([1, 3, 5, 7, 9])
>>>np.arange(1,13).reshape((3,4))					#reshape函数在后面会讲到
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

其实还有很多数组的创建方法,比如用np.random函数来创建随机数组数据(包括符合正态分布或贝塔分布的数据)等。

  1. 一些对于ndarray常用的操作函数
    最基本的操作就是对特定值的修改,这里我们可以直接通过某个值的下标,对其进行修改,例如:
>>> a=np.arange(12).reshape((3,4))
>>> print(a)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
>>> a[1][1]=12						#特殊地,这里的下标也可以写成[1,1]这种形式
>>> print(a)
[[ 0  1  2  3]
 [ 4 12  6  7]
 [ 8  9 10 11]]

基本运算(加减乘除和乘方),直接看例子:

>>> a+1									#对一个ndarray对象直接进行这些基本运算就相当于
array([[ 1,  2,  3,  4],				 对数组中存放的所有数据进行相应的操作
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
>>> a-1
array([[-1,  0,  1,  2],
       [ 3,  4,  5,  6],
       [ 7,  8,  9, 10]])
>>> a*2
array([[ 0,  2,  4,  6],
       [ 8, 10, 12, 14],
       [16, 18, 20, 22]])
>>> a/2
array([[0. , 0.5, 1. , 1.5],
       [2. , 2.5, 3. , 3.5],
       [4. , 4.5, 5. , 5.5]])
>>> a**3
array([[   0,    1,    8,   27],
       [  64,  125,  216,  343],
       [ 512,  729, 1000, 1331]], dtype=int32)

当然这些运算符号也可以进行矩阵之间的加减乘除,例如:

>>> a=np.arange(12).reshape((3,4))
>>> a=np.arange(12).reshape((3,4))
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
>>> b=np.arange(1,13).reshape((3,4))
>>> print(b)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
>>> print(a+b)
[[ 1  3  5  7]
 [ 9 11 13 15]
 [17 19 21 23]]

可能经常用到的函数有:转置矩阵(T):

>>>a=np.arange(12).reshape((3,4))			#用例如a.T的方法来获取该矩阵的转置矩阵
>>>print(a)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
>>>print(a.T)
>>>[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]

最大值、最小值和平均数函数(max,min 和 mean),这三个函数的参数相同,主要需要传入的参数是axis(维度),例如:

>>>a=np.arange(12).reshape((3,4))
>>>print(a.min())						#没有给定参数时,返回**整个矩阵**所有数据的最小值
0
>>>print(a.max(0))					#给定维度0,返回存有矩阵**每列数据**最大值的数组

>>>print(a.mean(1))					#给定维度1,返回存有**每行数据**平均值的数组

矩阵的复制(copy()),当想要创建一个与已有矩阵相同的矩阵时,你可能会想到有‘=’进行一个赋值,当ndarray有其独特的函数copy():

 >>>a=np.arange(12).reshape((3,4))
 >>>b=a
 >>>print(a,'\n\n',b)
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] 
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
 >>>a[1,1]=12
>>>print(a,'\n\n',b)	 			#可见直接用=对新矩阵赋值,虽然看似时复制
[[ 0  1  2  3]							成功了,但是当老矩阵中的值发生改变
 [ 4 12  6  7]							时,新矩阵中对应的值也
 [ 8  9 10 11]] 						会跟着改变,显然不是我们想要的效果

 [[ 0  1  2  3]
 [ 4 12  6  7]
 [ 8  9 10 11]]
 											#然而当使用copy函数时就可以避免这个问题
c=a.copy()
a[1,1]=5
>>> print(a,'\n\n',c)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] 

 [[ 0  1  2  3]
 [ 4 12  6  7]
 [ 8  9 10 11]]

reshape函数,用以给矩阵一个新的形状(行数,列数):

>>>a=np.arange(12)
>>>print(a.shape,'\n\n',a)
(12,) 

 [ 0  1  2  3  4  5  6  7  8  9 10 11]
>>>b=a.reshape((3,4))
>>>print(b.shape,'\n\n',b)
(3, 4) 

 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值