** 注:本文所用python版本是3.5**
Numpy是什么
Numpy(Numerical Python)是一个开源的Python科学计算库,包含很多实用的数学函数,线性代数运算,傅里叶变换等
Numpy beginner's guide.png现在用python搞数据分析或机器学习经常使用的pandas、matplotlib、sklearn等库,都需要基于numpy构建
- Numpy能够直接对数组和矩阵进行操作,运算效率优于Python提供的list容器
** Numpy模块里的函数帮助请求**
Paste_Image.pngimport numpy as np
#help()
help(np.arange)
#?方法
# np.arange?
数组对象
- Numpy数组一般是同质的,即数组中的所有元素类型必须是一致的
- Numpy数组下标也是从0开始的
- ndarray是numpy的核心数据结构。ndarray如何在内存中储存的:关于数组的描述信息保存在一个数据结构中,这个结构引用两个对象,一块用于保存数据的存储区域和一个用于描述元素类型的dtype对象
关于ndarray的索引方式,有以下几个重点需要记住:
- 虽然x[0,2] = x0,但是前者效率比后者高,因为后者在应用第一个索引后需要先创建一个temporary array,然后再应用第二个索引,最后找到目标值。
- 分片操作不会引发copy操作,而是创建原ndarray的view;他们所指向的内存是同一片区域,无论是修改原ndarray还是修改view,都会同时改变二者的值。
- index array和boolean index返回的是copy,不是view。
** 部分函数操作**
- 改变数组维度
import numpy as np
b = np.arange(24).reshape(2,3,4)
#ravel展平数组的操作
b.ravel()
#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])
'''
flatten也是展平操作,与ravel功能相同,
差异在于flatten会请求分配内存保存结果,
而ravel只是返回一下view
'''
b.flatten()
#reshape用一正整数元组设置数组的维度
b.reshape(4,6)
#resize 与reshape功能一样,resize会直接修改所操作的数组
b.resize((2,12))
b
#transpose转置矩阵
b.transpose()
- 数组的组合
Numpy数组有水平组合,垂直组合和深度组合等多种组合方式:vstack, dstack, hstack, column_stack, row_stack及concatenate函数。
import numpy as np
a = np.arange(9).reshape(3,3)
b = 2*a
'''
a = [[0 1 2]
[3 4 5]
[6 7 8]]
b = [[ 0 2 4]
[ 6 8 10]
[12 14 16]]
'''
#水平组合,与np.concatenate((a,b), axis=1)功能相同
np.hstack((a,b))
# array([[ 0, 1, 2, 0, 2, 4],
[ 3, 4, 5, 6, 8, 10],
[ 6, 7, 8, 12, 14, 16]])
#垂直组合,与np.concatenate((a,b), axis=0)相同
np.vstack((a, b))
# array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
# 深度组合,将一系统数组沿着纵轴方向进度层叠组合
np.dstack((a, b))
# array([[[ 0, 0],
[ 1, 2],
[ 2, 4]],
[[ 3, 6],
[ 4, 8],
[ 5, 10]],
[[ 6, 12],
[ 7, 14],
[ 8, 16]]])
#列组合, 与hstack效果相同
np.column_stack((a, b))
#行组合,与vstack效果相同的
np.row_stack((a, b))
*数组的分割
Numpy可以对数组进行水平,垂直或深度分割:hsplit, vsplit, dsplit和split,可将数组分割成相同大小的子数组,也可指定原数组中需要分割的位置
#水平分割,与np.split(a, 3, axis=1)相同
np.hsplit(a, 3)
#垂直分割,与np.split(a, 3, axis=0)相同
np.vsplit(a, 3)
#深度分割,按深度方向分割数组
c = np.arange(27).reshape(3,3,3)
np.dsplit(c, 3)
- 数组的属性
shape,数组的形状
dtype,数据类型
ndim,维数或数组轴的个数
size,数组元素总个数
itemsize,数组元素在内存中所占的字节数
nbytes,整个数组所占的存储空间
T,转置,与transpose一样
在numpy中,复数的虚部是用j来表示的
在复数中:real属性,imag属性分别取得数组的实部与虚部
flat,将返回一个numpy.flatiter对象,可遍历
- 数组的转换
tolist:将Numpy数组转换成Python列表
astype:可在转换数组时指定数据类型
网友评论