数据科学初阶(一)-- numpy数组基本方法

本文介绍了数据科学初阶的numpy数组知识,包括数组类型如复数数组及其操作,以及常用方法如创建零矩阵、获取坐标矩阵、转换类型、切片、求均值、中位数、和、乘积、最大最小值、方差和标准差等。通过实例演示了这些操作的使用,帮助读者掌握numpy数组的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章说明: 本系列面向全国大中小学的通用数据科学教材,原项目是由
Jin Li大佬整理的python笔记,鄙人学习后添加了许多自己的见解,于是最后写成了这系列手册。

本文代码均在jupyter notebook上实现。


数组类型

复数数组
  1. 产生一个复数数组
a = array([1+1j, 2, 3, 4+4j])
# 判断a数组的类型
a.dtype
# dtype('complex128')
  1. 查看复数矩阵的实、虚部
# 查看实部
a.real
# >>> array([1,2,3,4])
# 查看虚部
a.imag
# >>> array([1,0,0,4])

当然,我们也可以为数组设置实部、虚部的值,但是对于浮点类型或整数类型数组,虚部是只读模式,不能对其虚部进行赋值修改。

  1. 查看复数数组的共轭数组
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])
求方差/标准差

方差公式:

img

标准差为方差的算术平方根。

  • 方差:
%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])

关于数组类型和数组常用方法就先介绍到这了,希望大家能够好好练习来掌握。请期待下一篇教学~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DEROOCE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值