文章说明: 本系列面向全国大中小学的通用数据科学教材,原项目是由
Jin Li大佬整理的python笔记,鄙人学习后添加了许多自己的见解,于是最后写成了这系列手册。
本文代码均在jupyter notebook上实现。
文章目录
数组类型
复数数组
- 产生一个复数数组
a = array([1+1j, 2, 3, 4+4j])
# 判断a数组的类型
a.dtype
# dtype('complex128')
- 查看复数矩阵的实、虚部
# 查看实部
a.real
# >>> array([1,2,3,4])
# 查看虚部
a.imag
# >>> array([1,0,0,4])
当然,我们也可以为数组设置实部、虚部的值,但是对于浮点类型或整数类型数组,虚部是只读模式,不能对其虚部进行赋值修改。
- 查看复数数组的共轭数组
a.conj()
# >>> array([1-j,2,3,4-4j])
制定数组类型
a = array([0,1,2,3], dtype=float32)
查看字符对应的ASCII码:
# 使用ord()函数
ord('S')
# 83
改变数组元素类型 : a.astype(类型说明)
a = np.array([1,2],[3,4])
a.astype(float)
# array([1. , 2.], [3. , 4.])
常用方法
nparr.shape
:查看ndarray的行列
将输入值设置为有步长的列表
方法:np.arange(start, end,step)
返回一个零矩阵
方法:numpy.zeros(shape, dtype=float, order='C')
>>> s = (2,2)
>>> np.zeros(s)
array([[ 0., 0.],
[ 0., 0.]])
返回给定形状和类型的新数组,用零填充。
从坐标向量中返回一个坐标矩阵
方法:numpy.meshgrid(*xi, **kwargs)[source]
参数说明:
- x1,x2…,xn:数组,一维的数组代表网格的坐标。
nx,ny = (3,2)
#从0开始到1结束,返回一个numpy数组,nx代表数组中元素的个数
x = np.linspace(0,1,nx)
#[ 0. 0.5 1. ]
y = np.linspace(0,1,ny)
# [0. 1.]
xv,yv = np.meshgrid(x,y)
'''
xv
[[ 0. 0.5 1. ]
[ 0. 0.5 1. ]]
yv
[[ 0. 0. 0.]
[ 1. 1. 1.]]
''
通过上面的例子,其实可以发现meshgrid函数将两个输入的数组x和y进行扩展,前一个的扩展与后一个有关,后一个的扩展与前一个有关,前一个是竖向扩展,后一个是横向扩展。因为,y的大小为2,所以x竖向扩展为原来的两倍,而x的大小为3,所以y横向扩展为原来的3倍。通过meshgrid函数之后,输入由原来的数组变成了一个矩阵。通过使用meshgrid函数,可以产生一个表格矩阵。
将输入值转换为数组
使用asarray()
函数
a = [1.2, 3.4]
asarray(a, dtype=float32)
注意:使用
asarray()
函数不会改变原来数组的值,即不会产生新的对象,以保证效率。
另一个函数astype()
,该函数会返回一个新数组,且该数组只是原数组的一个备份,不会改变原数组的值。
切片
np_2d[: , 1:3]
# 获取所有行的第二和第三列
取字串:
# regular list of lists
x = [["a", "b"], ["c", "d"]]
[x[0][0], x[1][0]]
# numpy
import numpy as np
np_x = np.array(x)
np_x[:,0]
查看修改数组形状
ndarr.shape
ndarr.shape = 2,2
生成一组等间距的数据
# 使用linspace方法
ndarr = linspace(0, 2*pi, 21)
# 设置精度
%precision 3
linspace()
为numpy的函数,返回一个ndarray.
配合matplotlib画图
# 绘制ndarr的正弦函数图像
b = sin(a)
%matplotlib inline
plot(a,b,'ro') # 参数 'ro'表示绘制红色的线
从数组中选择元素
直接使用逻辑运算符即可
# 获取ndarray中值大于0的数据
ndarr > 0
高斯分布
高斯分布(Gaussian Distribution)的概率密度函数(probability density function):
f(x)=\frac1{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2})
对应于numpy
中:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
参数的意义为:
loc:float
: 此概率分布的均值(对应着整个分布的中心centre)scale:float
:此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)size:int or tuple of ints
: 输出的shape,默认为None,只输出一个值
求取均值
np.mean()
函数功能
经常操作的参数为axis,以m * n矩阵举例:
axis
不设置值,对 m*n 个数求均值,返回一个实数axis = 0
:压缩行,对各列求均值,返回 1* n 矩阵axis =1
:压缩列,对各行求均值,返回 m *1 矩阵
还可以使用average
方法求均值:
a = array([[1,2,3],[4,5,6]])
average(a, axis=0)
# average同时支持加权平均值
average(a,axis=1,weights=[1,2])
"""
weights = [1,2]
代表对于二维数组a,第一维权重比为 1/(1+2),第二维权重比为 2/(1+2)
"""
求中位数
-
计算沿指定轴的中位数
返回数组元素的中位数
numpy.median()
其函数接口为:
np.median(a,
axis=None,
out=None,
overwrite_input=False,
keepdims=False)
各参数为:
a
:输入的数组;axis
:计算哪个轴上的中位数,比如输入是二维数组,那么axis=0对应行,axis=1对应列;out
:用于放置求取中位数后的数组。 它必须具有与预期输出相同的形状和缓冲区长度;
实例
a = np.array([1,2],[3,4])
np.median(a, axis=0, out=b)
# array([2.5, 3.5])
b
# array([2.5, 3.5])
求和
方法: sum(ndarray)
a = array([1,2,3])
sum(a)
# 6
当然,对数组求和也可以指定需要求和的方向:
%pylab
a = array([1,2,3],[4,5,6])
# 对相应的数组纵向求和
sum(a, axis=0)
# array([5,7,9])
# 对相应的数组横向求和
sum(a, axis=1)
# array([6,15])
另一种方式:
# 对数组元素求和
a.sum()
# 沿着纵向和横向求和
a.sum(axis=0)
a.sum(axis=1)
数组所有元素的乘积
方法:ndarray.prod()
与sum()
方法使用方法类似
a.prod()
# 指定方向进行乘积
prod(a, axis=0)
prod(a, axis=1)
可以用来求阶乘
最大最小值
方法:a.min()/max()
可以指定某一方向的最值:
a.max(axis=1)
补充方法①:使用
argmin()/argmax()
方法返回最值的位置索引。
a.argmin(axis=0)
a.argmax(axis=1)
补充方法②:使用
ptp()
方法求最大最小值之差
a = array([1,2,3],[4,5,6])
# 求纵向上的最值差
a.ptp(axis=0)
# 返回array([3,3,3])
求方差/标准差
方差公式:
标准差为方差的算术平方根。
- 方差:
%pylab
# 两种方式表达
ndarray.var(axis=0/1)
var(ndarray, axis=0/1)
- 标准差
%pylab
ndarray.std(axis=0/1)
std(ndarray, axis=0/1)
限制数组的数字范围
使用clip()
方法可以将数组内的元素大小都控制在一个范围内,元素小于范围下界,则将下界的值赋予该元素,元素大于范围上界时同理。
a = array([1,2,3],[4,5,6])
a.clip(2,5)
a
'''
array([[2,2,3],
[4,5,5]])
'''
对数组元素进行取整
使用round
方法可以将数组元素进行近似取整:
a = array([1.33,2.66])
a.round()
# 返回值 array([1,3])
round()
方法还可以选择近似到的小数位:
a.round(decimals=1)
# 返回值 array([1.3,2.7])
对于
.5
的小数,则有限取整到偶数,如1.5
取整为2
。
使用fill
方法设定初始值
使用fill()
方法将数组设为指定值:
fill()
函数的接口为:
ndarray.fill(value)
"""
value : scalar
All elements of a will be assigned this value.
"""
a = np.array([1, 2])
a.fill(0)
a
#array([0, 0])
关于数组类型和数组常用方法就先介绍到这了,希望大家能够好好练习来掌握。请期待下一篇教学~