NumPy基础
基于ipython
这里我用的是python2解释器
在root用户下载安装 jupyter
在命令行执行
jupyter notebook --allow-root
会在默认浏览器打开一个窗口
如图
然后点击New 选项选择python解释器
选择完成后就会出现命令行,可以输入命令了
1.初识数组对象
import numpy as np
np.__version__
这是查看当前NewPy版本的方法 (附,执行时点击Run或者应用快捷键 Shift+Enter )
首先我们创建一个数组
data=np.array([1,2,3])
data
输出为 array([1,2,3])
type(data)
输出为 numpy.ndarray
这里的ndarray是NumPy的核心功能,即多维数组
当然每一个数组都有他的属性和方法
查看:
dir(data)
会输入一堆就不多解释了
当需要查看数组类型时
输入 data.dtype
输出 dtype('int64')
表明数组data是由整形数字构成的,这些数字也成为数组的元素
2.数组的属性
我们先看数组元素类型的转化
new=data.astype(np.float)
new
输出 array([1.,2.,3.])
这是将整形元素转化为浮点型元素
new.dtype
输出 dtype('float 64')
而原来的data类型并没有改变
这里我们知道了dtype是表示数组元素的类型
那么还有一些其他的属性如下表
属性 解释
shape 返回由整数组成的元组,元组中的每个整数依次对应每个轴的元素个数
size 返回一个整数,代表数组中元素的个数
ndim 返回一个整数,代表数组的轴的个数,即维度
nbytes 返回一个整数,代表用于保存数据的字节数
例如
a=np.array( [1,2] )
a.shape 返回 (3,)
c=np.array( [1.0,2.0,3.0,4.0] )
c.shape 返回 (4,)
a.ndim 返回 1
a.size 返回 3
牢记:组成数组的元素必须是同一种类型,这跟python里的list明显不同
创建数组的基本方法: np.array( )
当然我们也可以这样创建元素是浮点型的数组,在元素少的时候较为方便
b=np.array( [1,2,3,4], dtype=float ( )
b b.dtype
返回 是 array( [1.,2.,3.,4.] ) 和 dtype( 'float64')
附: 嵌套列表要求每个嵌套列表长度都相同
如
d=np.array( [ [1,2,3], [4,5,6] ,[7,8,9] ] )
d
返回 array( [ [1,2,3] ,
[4,5,6],
[7,8,9] ] )
如果元素长度不相同,那么NumPy会自动推断元素类型 ,如
e=np.array( [ [1,2,3] ,[4,5], [7,8,9,10 ] ] )
e
返回 array( [list( [1,2,3] ), list( [4,5] ), list ( [ 7,8,9,10 ] ) ],dtype=object )
注意此时返回的各种属性
e.shape ------(3,4) 嵌套了三个小列表,每个小列表有4个元素 也可以理解为在0轴上有三个元素,在1轴上有4个元素
e.size ------9 这里的size 即python里的len ( )
e.ndim ------2
b.shape ------(4,)
这里为了方便理解shape属性,我举了几个例子如下
db= np.array ( [ 1,2,3,4,5,6,7,8 ],ndim=2 )
db 返回 array( [ [1,2,3,4,5,6,7,8 ] ] )
因为告知了数组是二维的,所以0轴存在但是空,1轴上是1到8
db.shape 返回 (1,8)
为方便记忆,我们可以这样理解,一维数组就是一个中括号,二维数组两个,如果告知是几维数组那就是几,这里的括号指嵌套的外部括号。
而shape属性的第一个数字是轴数,一个中括号则表示在0轴上,省略不写,两个则表示在1轴上,括号指最里面的小括号数。
复数类数组
a=array( [1,2,3] )
de=np.array( [a,dtype=complex ] )
de 返回结果是
array( [1.+0.j , 2.+0.j , 3.+0.j , 4.+0.j ] )
de.dtype( )
返回 dtype(' complex128 ')
3.用函数创建数组
np.zeros( (2,10 ) )
np.ones ( (3,5 ) )
结果如图
事实上,NumPy也有内置函数如下
函数 解释
asarray 输入参数为列表、元组,或者由他们组成的嵌套对象或数组,返回一个数组。如果参数是数组,则返回该数组本身
arange 根据开始值、结束值和步长创建一个数组
ones、ones_like 创建元素值为1的数组
zeros、zeros_like 创建元素值为0的数组
empty、empty_like 创建元素为空的数组
eye 、 identity 创建对角线元素为1,其余元素是0的二维数组
diag 创建对角线元素是指定元素,其余元素是0的二维数组
linspace 根据开始值,结束值和元素数量创建元素是等差数列的数组
logspace 根据开始值,结束值和元素数量和对数底创建元素是等比数列的数组
解释
np.ones ( ( 6, ) ) -array( [1.,1.,1.,1.,1.,1.] )
np.ones( 6) -array( [1.,1.,1.,1.,1.,1.] )
当然这里输出也可以作为输入的参数
使用np.ones_like( )有同样的效果
此处也能够指定元素类型,在b后面加dtype=np.int
输出元素类型为整形
这里我们定义输出的数组是矢量,那么就可以和标量做算术运算
比如给上面的数组乘以6,结果他内部的元素就都变为6了
我在这列举每个内置函数的使用方法
注意:diag函数还有取对角线的作用
如
这里请多留意diag( )函数的使用方法,有他的另一个用法
最后元素是等差和等比的数组,等差数列符合Python的左闭右开规则,但是等比数列则是左右都开。
4.用from系列函数创建数组
lambda函数的用法相信大家都清楚,这里就不多说了
这里说一点,(9,9)是创建数组的shape值,第一个9代表一共9个轴,第二个9代表每个轴有9个元素
第一个图其实就是九九乘法表
这里的 i 和 j 都是从0开始的
希望这些基本用法对大家有所帮助