python数据分析———NumPy

(以下所有代码都是在jupyter notebook中运行)

一、NumPy - 简介

NumPy是一个python包。它是一个由多维数组对象和用于处理数组的例程集合组成的库。

使用NumPy,可执行以下操作:
1、数组的算数和逻辑运算。
2、傅里叶变换和用于图形操作的流程。
3、线性代数有关的操作。Numpy拥有线性代数和随机数生成的内置函数。

二、NumPy - ndarray对象和其属性

ndarray 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)
基本的ndarray是使用 NumPy 中的数组函数创建的(numpy.array()

属性:

  • ndarray.ndim 阵列的轴数。
  • ndarray.shape 数组的大小,表示每个维度中数组的大小。
  • ndarray.size 数组的元素总数,相当于元素的乘积。
  • ndarray.dtype 描述数组中元素类型的对象。
  • ndarray.itemsize 数组中每个元素的大小。

三、NumPy - 数组的创建

numpy.zeros() 返回特定大小,以0填充的新数组

import numpy as np
np.zeros(shape=(3,3),dtype=np.int)
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

numpy.ones() 返回特定大小,以1填充的新数组

np.ones(shape=(3,3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

numpy.full() 指定数放入矩阵

import numpy as np
np.full(shape=(2,3),fill_value=6)
array([[6, 6, 6],
       [6, 6, 6]])

numpy.eye() 单位矩阵

import numpy as np
np.eye(N=4,M=4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

numpy.random.randn() 从“标准正态”分布中返回一个样本
numpy.random.normal() 从正态(高斯)分布中抽取随机样本

import numpy as np
# 可以控制期望值和方差变化
# loc 期望值  默认0
# scale 方差 默认值1
np.random.normal(loc=10,scale=2,size=(2,3))
# loc:float
#     此概率分布的均值(对应着整个分布的中心centre)
# scale:float
#     此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
# size:int or tuple of ints
#     输出的shape,默认为None,只输出一个值
array([[ 8.01600174,  7.58884683, 11.24281731],
       [ 8.96752779, 10.71715635, 12.57544995]])

四、NumPy - ndarray的基本操作

1.索引(一维与列表完全一致,多维度同理)

import numpy as np
arr1 = np.random.randint(0,100,size=10)
# array([63, 17, 78,  0, 72, 33, 35, 81, 37, 21])  打印出来的结果(都是随机数)
arr1[0] = 11
# array([11, 17, 78,  0, 72, 33, 35, 81, 37, 21])
arr1[-1]
# 21
arr1[[0,1]]
# array([11, 17])

2.切片(y一维与列表完全一致,多维时同理)

arr2
# array([[38, 85, 35, 51, 31],
       [59, 33, 99, 19, 62],
       [92, 13, 98, 56, 52]])
arr2[0:1]
# array([[38, 85, 35, 51, 31]])
arr2[:,0:2]
# array([[38, 85],
       [59, 33],
       [92, 13]])
arr2[::-1,:]
# array([[92, 13, 98, 56, 52],
       [59, 33, 99, 19, 62],
       [38, 85, 35, 51, 31]])  

3.变形(使用reshape函数)

import numpy as np
arr = np.random.random(size=(5,5,3))
# 变成一列
arr.reshape(-1,1)
# 变成一行
arr.reshape(1,-1)

4.级联

  • np.concatenate() 级联需要注意的点:
  • 级联的参数是列表:一定要加中括号或小括号。
  • 维度必须相同。
  • 形状相符。
  • 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向。
  • 可通过axis参数改变级联的方向。
import numpy as np
n1 = np.ones(shape=(6,3))
n2 = np.zeros(shape=(6,3))
# axis就表示维度的方向
np.concatenate((n1,n2),axis=1)
# array([[1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.]])
np.hstack与np.vstack
水平级联与垂直级联,进行维度的变更       
np.hstack((n1,n2)) 
# array([[1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0., 0.]])     
np.vstack((n1,n2))
# array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])   

5.切分

与级联类似,三个函数完成切分工作:

  • np.split
  • np.vsplit
  • np.hsplit
arr = np.random.randint(0,100,size=(6,6))
# 指定切分的块数来进行切分,axis控制轴向
np.split(arr,indices_or_sections=3,axis=1)
# 自定义切分
# n m  切分范围为 0~n ,n~m, m~last
np.split(arr,indices_or_sections=[3,5],axis=1)

6.副本

所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。
可使用copy()函数创建副本

arr = np.random.randint(0,10,10)
arr[0] = 100
copy_arr = arr.copy()
print(arr)
print(copy_arr)

五、ndarray的聚合操作

1.求和np.sum()

2.取最小值np.min()

在取最大值中还有一个函数np.argmin()

  • 如果操作的是一维数组,没有问题,
  • 如果是二维数组,要指定axis,不然得到的索引无法使用,需要对原数组做扁平化处理
  • axis = 1时,表示行方向寻找。axis=0时,表示列方向寻找。
import numpy as np
n = np.random.randint(0,10,size=(3,3))
# array([[4, 0, 9],
       		[4, 5, 2],
       		[0, 0, 9]])
np.max(n,axis=1)
# array([9, 5, 9])
np.argmin(n2,axis=1)
# array([1, 2, 0], dtype=int64)       返回的是相应最小值的下标

3.取最大值np.max() 同np.main()

4.求标准差np.std()

5.求平均值np.mean()

六、ndarray的矩阵操作

1.基本矩阵操作

  • 加减乘除
  • 矩阵积np.dot()

2.广播机制

【重要】ndarray广播机制的两条规则

  • 规则一:为缺失的维度补1
  • 规则二:假定缺失元素用已有值填充
import numpy as np
例1: m = np.ones((2, 3)) a = np.arange(3) 求M+a
m = np.ones((2,3))
a = np.array([5])
display(m,a)
# array([[1., 1., 1.],
       [1., 1., 1.]])
# array([5])
m + a
# array([[6., 6., 6.],
       [6., 6., 6.]])

七、ndarray的排序

import numpy as np
np.sort()与ndarray.sort()都可以,但有区别:
np.sort()不改变输入
ndarray.sort()本地处理,不占用空间,但改变输入

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值