【python】 Numpy介绍与使用

0 前言   

一维数据一般采用线性方式表示,可以是有序或者无序的。
列表和数组都可以表示一组数据的有序结构,但是列表元素类型可以不同,数组元素类型需要相同。

列表元素数据类型可以不同:

[“1”,“2”,“str”,“4”,“pi”]

数组数据类型要相同。

二维数据是一维数据的多个组合形式。表格是典型的二维数据。

多维数据由一维或二位在新的维度上组合,如时间维度。比如去年的表格和今年的表格存在时间维度的差别。

高维数据:一般由键值对将数据组织表示出来。

{

“姓名”:“lol”,

“年龄”:“18”,

“学习经历”:{

     “小学”:“xx小学”,

     “中学”:“xx中学”,

     “大学”:“xx大学”

     },

}

python中数据的表示形式:

一维:列表 [有序] 和集合 {无序} 类型。
二维、多维数据多用列表[ ]类型表示。

[ [0, 1, 2],
  [3, 4, 5] 
]
 #二维数据,形状(2,3)

三维数据,数据形状(2,3,4)

[ [ [ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11] ],
    
  [ [12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23] ]
]

高维数据:字典 { } 或其他数据表示格式(json,xml等)。

1 numpy数据类型ndarray介绍

开源python科学计算基础库,可以进行快速的数组运算。降低传统数组运算时循环需要的时间,节省运算和存储空间。
数组类型为ndarray 对象。
使用前先安装:

pip install numpy

一般引用方法:

import numpy as np
np是别名可以自己设置,为了节省代码量增加可读性一般最好和大家统一

1.1array数组介绍及基本属性

ndarray数据类型不仅包含实际的数据,还有描述数据的一些详细信息,如数据类型,维度,结构等等。
ndarray(shape, dtype=float, buffer=None, offset=0,strides=None, order=None)

shape:tuple of ints,Shape of created array.为元组型数值,表示创建的array形状。
dtype=float:data-type, optional,创建的numpy数组的数据类型,可选参数。
buffer:object exposing buffer interface, optional,数据接口,可以在创建array时填充数据
offset:Offset of array data in buffer.填充数据的偏移。
strides:Strides of data in memory.
order:数据排布格式,行形式或者列形式, {‘C’, ‘F’}, optional

在numpy程序中ndarray就是array。
array数组的轴(axis):数据的维度
秩(rank):表示数据维度的数量。
array对象的常用属性:

属性说明
.TTranspose of the array.数组的转置
.ndim秩,多维数组维度的值
.shape对象的度量尺度,如(m,n)表示矩阵m行n列
.sizearray对象中元素的个数相当于shape中的乘积
.dtypearray对象的元素类型,可设置
.itemsize数组对象中每个元素的大小,以字节为单位,如dtype=int32型表示4字节

示例:

import numpy as np
a = ([2,5,3,8],[1,4,7,6])
b = np.arange(24).reshape((2,3,4))

print(a) #此处a是tuple()类型
([2, 5, 3, 8], [1, 4, 7, 6])

a = np.array(a)
print(a) #这里a才是numpy的array类型
[[2 5 3 8]
 [1 4 7 6]]

print(b) #b是三维的数据
[	[[ 0  1  2  3]
  	 [ 4  5  6  7]
  	 [ 8  9 10 11]]

 	[[12 13 14 15]
  	 [16 17 18 19]
  	 [20 21 22 23]]	]

常用属性:

a = np.array([[1,2,4],[2,3,6]])

a
Out[3]: 
array([[1, 2, 4],
       [2, 3, 6]])

a.T  #转置
Out[4]: 
array([[1, 2],
       [2, 3],
       [4, 6]])

a.ndim  #维度
Out[5]: 2

a.shape  #形状,返回元组
Out[6]: (2, 3)

a.size  #数据量
Out[7]: 6

a.dtype  #数据类型
Out[8]: dtype('int32')

a.itemsize   #单个数据占用大小
Out[9]: 4

你可以在IPython编辑区内对变量或者函数输入 函数/变量? 查看其详细属性。np.ndarray? 可以查看ndarray数组的详细属性。a?查看变量的属性。

a?
Type: ndarray
String form:
[[2 5 3 8]
[1 4 7 6]]
Length: 2
File: d:\pyrelated\anaconda\lib\site-packages\numpy_init_.py
… … … .

使用array创建的数组元素默认是float型,可以进行更改。

1.2 array数组中的数据类型

array数组在创建时有个参数dtype是可以设置的,默认的是float,可能会根据数据量自动调整具体类型,numpy里面的数据类型非常的详细,是为了合理使用存储空间空间、评估程序规模提高程序运行速度等。
数据类型有:

bool, intc, intp, int8, int16, int32, int64, uint8, uint16, uint32, uint64,float16, float32, float64, complex64, complex128 复数 img + real

1.3 创建array数组

(1)利用python中的列表[]和元组()创建ndarray数组。x = np.array(lis/tuple)

a = [[1,2],[3,4]]  #列表
b = ([5,6],[7,8])  #元组

type(a)
Out[19]: list
type(b)
Out[20]: tuple

c = np.array(a)  #转化为array数组
d = np.array(b)

c
Out[23]: 
array([[1, 2],
       [3, 4]])
d
Out[24]: 
array([[5, 6],
       [7, 8]])

创建时数据类型还可以指定,之前介绍过array()的一些参数。不指定类型的时候可以根据数据情况自动关联一个dtype类型。

e = np.array(a,dtype=np.int64)  #自定义数据类型

d.dtype
Out[27]: dtype('int32')
e.dtype
Out[28]: dtype('int64')

(2)使用numpy中的函数创建ndarray数组。

函数说明
arange(n)生成0-n-1数值的ndarray
ones(shape)生成一个全是1的形状为shape的数组
zeros(shape)生成全是0的,shape是表示大小的元组()
full(shape,val)生成一个大小是shape,值是val的数组
eye(n)生成正方形n的单位矩阵
ones_like(a)根据数组a的形状生成全是1的
zeros_like(a)根据a生成全是0的
full_like(a,val)根据a的声称全是值val的数组

示例:

a = np.arange(4)   #一维数组
b = np.ones((2,2))  #全1数组
c= np.zeros((2,3))    #全0数组
d = np.full((3,3),6)   #使用定值生成数组
e = np.eye(4)    #单位矩阵

a
Out[39]: array([0, 1, 2, 3])
b
Out[40]: 
array([[ 1.,  1.],
       [ 1.,  1.]])
c
Out[41]: 
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
d
Out[42]: 
array([[6, 6, 6],
       [6, 6, 6],
       [6, 6, 6]])
e
Out[43]: 
array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])

f = np.ones_like(d)  #以数组d的格式作为参考,生成新的值是1的数组
g = np.zeros_like(d)
h = np.full_like(d,8)

f
Out[51]: 
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
g
Out[52]: 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])
h
Out[53]: 
array([[8, 8, 8],
       [8, 8, 8],
       [8, 8, 8]])

(3)其他函数创建。
np.linspace(A,B,C) 在AB间均匀取C个数据,其他参数np.linspace?查看

np.linspace(2.0, 3.0,5)    #生成线性值
Out[55]: array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ])

np
np.concatenate(a,b) 合并多个数组

a = np.linspace(2.0, 3.0,5)
b = np.arange(4)
c = np.concatenate((a,b))  #合并数组,其他参数help查看文档

c
Out[78]: array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ,  0.  ,  1.  ,  2.  ,  3.  ])

2 array 数组的变换

生成的array数组可以进行维度和元素类型的变换。

2.1 维度变换

常用方法说明
.reshape(shape)不修改元素,新生成shape形状数组,原数组也不改变
.resize(shape)在原数组基础上直接修改shape形状
.flatten()降维处理,整理新生成一维数组
a = np.arange(24).reshape((2,3,4))
Out[127]: 
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]]])

a.reshape((2,4,3))   #使用reshape时原来的数组a不会变化,会新生成一个
Out[128]: 
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]]])
        
a.resize((4,3,2))    #使用resize就会改变原来a的形状
print(a)
[[[ 0  1]
  [ 2  3]
  [ 4  5]]

 [[ 6  7]
  [ 8  9]
  [10 11]]

 [[12 13]
  [14 15]
  [16 17]]

 [[18 19]
  [20 21]
  [22 23]]]
  
print(a.flatten())  #降维,平整为一维数据
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

2.2 array数组类型的变换

(1)array 的数据类型变化。
设a为一个array数组。
b = a.astype(newtype)
使用a.astype()的时候相当于新复制了一个数组,然后进行改变。

 a = np.arange(5)

a.dtype
Out[134]: dtype('int32')

a.astype(np.float)
Out[135]: array([ 0.,  1.,  2.,  3.,  4.])

(2)array 数组转为列表
转化为列表会比numpy数组慢很多,除非有特殊要求,不建议使用。

a
array([[0, 1, 2],
       [3, 4, 5]])

a.tolist()
Out[138]: [[0, 1, 2], [3, 4, 5]]

3 numpy数组的索引和切片

索引:获取指定位置的数据元素
切片:获取数据元素子集

3.1 一维索引切片:

直接通过 a[x],a[A:B:C] 获取

array([0, 1, 2, 3])

a[1]
Out[141]: 1
a[0:2:1]
Out[142]: array([0, 1])

3.2 多维索引切片

可以将多维数据的每一个维度按一维形式切片索引即可

array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]]])

a[:,1,2]  #第一个维度取全部,第二个维度取第2个位置,第三个维度取第3个位置
Out[4]: array([ 5, 14])

array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
a[[1,2],[0,1]]  #先在第一个维度取2,3行,第二个维度取1,2列
Out[7]: array([3, 7])

4 np.random 随机数生成函数

np.random.rand()和np.random.randn()使用类似,生成正态分布随机样本数组。

()里面没有参数时返回一个浮点数
(X)有一个参数时,返回秩是1,长度是X的数组
(2,3)两个参数时,表示对应形状的随机数组,和np.random.standard_normal()功能一样,只不过它需要输入元组((2,3))

rand()生成的在0-1之间,randn()没有限制数据样本区间。

np.random.randint()生成随机整数。

randint(low, high=None, size=None, dtype=‘l’)
指定区间、数量、类型

np.random.random(size)只能生成随机数。

size表示个数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值