numpy学习 第1篇:numpy基础
numpy是Python中的基础模块,类型ndarray定义了一个具有矢量算术运算的多维数组,无需编写循环,就能对整个数组进行批量运算。通常情况下,导入numpy,设置别名为np。
import numpy as np
一,创建多维数组
ndarray是N-Dimension-Array的简称,该对象是一个快速而灵活的大数据集容器,该容器中存储的元素的数据类型都是相同的。
创建矩阵的方法有array()、arange()、ones函数和zeros函数,array()是一个函数,用于创建ndarray类型的对象。
1,使用array()函数创建数组
使用array()函数创建数组,可以使用type()函数查看对象的类型:
a = np.array([1,2,3,4,5])
a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])
通过array()函数,使用列表创建的是一维数组,使用嵌套的列表创建的是多维数组。
2,使用arange()函数创建矩阵
通过arange()函数创建矩阵,arange类似于Python的内置函数range,但返回的是一个ndarray,而不是列表。
函数的参数分别是:start、end和step,
a = np.arange(10) #default start=0, end=10(exclude 10),step=1 # [0 1 2 3 4 5 6 7 8 9] a1 = np.arange(5,10) # start=5, end=10(exclude=10),step=1 # [5 6 7 8 9] a2 = np.arange(5,20,2) # start=5, end=20(exclude 20),step=2 #[ 5 7 9 11 13 15 17 19]
3,使用ones(),zeros()和eye()函数创建数组
使用ones()创建元素都为1的数组,使用zeros()函数创建元素都是0的数组,参数是表示数组形状shape的元组,表示的是数组各个维度的元素数量。最简单的二维数组的shape元组是(row_num, column_num) ,它表示数组的行数量和列数量。
>>> a=np.ones(3); array([ 1., 1., 1.]) >>> b=np.ones((3,2)); array([[ 1., 1.], [ 1., 1.], [ 1., 1.]]) >>> c=np.zeros(3) array([ 0., 0., 0.]) >>> d=np.zeros((2,3)); array([[ 0., 0., 0.], [ 0., 0., 0.]])
eye()创建一个正方形的NxN的单位矩阵,对角线的元素值是1,其余元素值是0
4,数组可以转换为列表
tolost()函数用于把一个数组对象转化为list列表:
d.tolist()
二,数组的属性
数组对象的属性主要有:
- dtype:描述数组元素的类型
- shape:以tuple表示的数组形状
- ndim:数组的维度
- size:数组中元素的个数
1,dtype对象
dtype是一个特殊的对象,它表示数组元素的类型。
2,shape对象
以元组形式表示一个数组的维度
3,ndim对象
数组各个维度的元素数量
三,索引和切片
ndarray对象的元素可以通过索引或切片来访问和修改,索引基于0。
1,数组的索引
一维数组很简单,从表面上看,一维数组的索引跟Python列表的功能差不多。
arr = np.arange(10)
arr[index]
arr[start:end]
arr[start:end:step]
在一个二维数组中,各索引位置上的元素不再是标量,而是一维数组。
arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]]) >>> arr2d[2] # array([7,8,9]) >>> arr2d[0][2] #3 >>> arr2d[0,2] #3
对于更高维度的数组,一个中括号表示一个维度,索引的使用依此类推。
2,数组的切片
数组切片是原始数组的视图,修改切片中的原始,会直接修改原始数据。数组的切片是Python基本切片的概念从一维到N维的扩展,通过中括号,start,stop和step参数提供给内置函数的slice函数来构造一个Python slice对象,此slice对象被传递给数组来提取数组的一部分。
获取切片的格式是[start:end:step],如果省略start,使用start的默认值0;如果省略end,那么end的默认值是:维度长度-1;如果省略step,使用step的默认值1。通常情况下,数组的切片是[start:end],这就意味着使用step的默认值1。
对于一维数组,数组切片上的任何修改都会直接修改原始数组:
arr = np.arange(10) arr_slice=arr[5:8] arr_slice[1]=111 #arr=array([0,1,2,3,4,5,111,7,8,9]) arr_slice[:]=222 #arr=array([0,1,2,3,4,222,222,222,8,9])
对于二维数组,一个中括号表示一个维度,依此类推。
四,随机数生成
numpy.random模块是对Python内置的random的升级,增加了一些用于搞笑生成多种概率分布的样本值的函数。
常用的numpy.random模块的函数:
- seed:确定随机数生成器的种子
- permutation:返回一个序列的随机排列
- shuffle:对一个序列就地进行随机排列
- rand:产生均匀分布的样本值
- randint:从给定的上下限范围内随机选取正数
- randn:产生标准正态分布
- binomial:产生二项分布的样本值
- normal:产生高斯正态分布的样本值
- beta:产生Beta分布的样本值
- chisquare:产生卡方分布的样本值
- gamma:产生伽马分布的样本值
- uniform:产生在[0,1]范围中均匀分布的样本值
例如,使用normal得到一个标准正态分布的4x4样本数组:
samples=np.random.normal(size=(4,4))
参考文档:
Numpy Quickstart tutorial
Python NumPy学习总结