【Python】机器学习矩阵运算必学库Numpy首秀!

公众号:尤而小屋
作者:Peter
编辑:Peter

大家好,我是Peter~

开始更新numpy相关的文章,本文介绍numpy中的25个小案例,主要内容是如何利用numpy来生成向量(一维数组),矩阵和高维数组等

4a392484a394d33346f2d99022007b56.png

numpy介绍

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray

  • 广播功能函数

  • 整合 C/C++/Fortran 代码的工具

  • 线性代数、傅里叶变换、随机数生成等功能

导入numpy

import numpy as np

打印numpy的版本和配置信息

print(np.version)
<module 'numpy.version' from '/Applications/downloads/anaconda/anaconda3/lib/python3.7/site-packages/numpy/version.py'>
print(np.show_config)
<function show at 0x1060cc560>

查看函数帮助文档

# np.info(np.abs)

创建0向量

np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

np.zeros((5,2))
array([[0., 0.],
       [0., 0.],
       [0., 0.],
       [0., 0.],
       [0., 0.]])
np.zeros((2,2,3))
array([[[0., 0., 0.],
        [0., 0., 0.]],

       [[0., 0., 0.],
        [0., 0., 0.]]])

改变0向量指定位置的值

z = np.zeros((3,4))
z
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
z[2,3] = 1
z[1,1] = 2

z
array([[0., 0., 0., 0.],
       [0., 2., 0., 0.],
       [0., 0., 0., 1.]])

找到非0的值

np.nonzero(z)
(array([1, 2]), array([1, 3]))

创建全1向量、数组

np.ones(6)
array([1., 1., 1., 1., 1., 1.])
np.ones((3,2))
array([[1., 1.],
       [1., 1.],
       [1., 1.]])
np.ones([2,3,2])
array([[[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]]])

创建单位矩阵-eye

np.eye(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
np.eye(4,dtype=int)
array([[1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1]])

自定义数据类型

np.ones([2,3])  # 默认是浮点数
array([[1., 1., 1.],
       [1., 1., 1.]])
np.ones([2,3],dtype=int)  # 指定为int类型
array([[1, 1, 1],
       [1, 1, 1]])

列表转数组

lst = [1,2,3,4]

np.array(lst)
array([1, 2, 3, 4])
# 指定数组类型

lst = [1,2,3,4]
np.array(lst, dtype=float)
array([1., 2., 3., 4.])

嵌套列表转数组

lst1 = [[1,2,3],[4,5,6]]

np.array(lst1)
array([[1, 2, 3],
       [4, 5, 6]])
# 指定数据类型

lst1 = [[1,2,3],[4,5,6]]

np.array(lst1, dtype=float)
array([[1., 2., 3.],
       [4., 5., 6.]])

元组转数组

t1 = (9,8,7)
np.array(t1)
array([9, 8, 7])

嵌套元组转数组

t2 = ((9,8,7),(6,5,4))
np.array(t2)
array([[9, 8, 7],
       [6, 5, 4]])

列表和元组混合

lt = [(1,2,3),(7,8,9)]

np.array(lt)
array([[1, 2, 3],
       [7, 8, 9]])

迭代器转数组

range_number = range(3,8)

np.array(range_number)
array([3, 4, 5, 6, 7])
# 指定类型

range_number = range(3, 8)
np.array(range_number, dtype=float)
array([3., 4., 5., 6., 7.])

特殊矩阵1

边界值为1,其他为0

b = np.ones([6,6])
b
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
b[1:-1,1:-1] = 0

b
array([[1., 1., 1., 1., 1., 1.],
       [1., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 1.],
       [1., 1., 1., 1., 1., 1.]])

特殊矩阵2

用0填充矩阵的边界

c = np.ones((6,6))
c
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
np.pad(c,pad_width=1,mode="constant",constant_values=0)
array([[0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 1., 0.],
       [0., 1., 1., 1., 1., 1., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0.]])

特殊矩阵3

6*6的矩阵,对角线下方的值为1,2,3,4,5

np.diag(1 + np.arange(5), k=-1)
array([[0, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0],
       [0, 2, 0, 0, 0, 0],
       [0, 0, 3, 0, 0, 0],
       [0, 0, 0, 4, 0, 0],
       [0, 0, 0, 0, 5, 0]])

np.arange函数

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数使用方法为:

numpy.arange(start, stop, step, dtype)
  • start:起始值,默认为0

  • stop:终止值,不包含

  • step:步长,默认为1

  • dtype:返回数组的数据类型

np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 指定步长
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
# 指定类型
np.arange(0,10,2,dtype=float)
array([0., 2., 4., 6., 8.])

创建随机数组

np.random.random((2,3,2))
array([[[0.56045087, 0.15566786],
        [0.34963774, 0.51837142],
        [0.68895046, 0.04980068]],

       [[0.98352437, 0.47189043],
        [0.30430488, 0.49057744],
        [0.20020709, 0.90466043]]])

Pandas数据转数组

import pandas as pd
s = pd.Series([1,2,3,4])

np.array(s)
array([1, 2, 3, 4])
d = pd.DataFrame([[1,2,3,4],[9,8,7,6]])

np.array(d)
array([[1, 2, 3, 4],
       [9, 8, 7, 6]])

反转数组

ten = np.arange(10)
ten
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
ten[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

reshape函数

主要是用来改变数组的形状

arr = np.arange(16)
arr
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
arr.shape
(16,)
arr.reshape((4,4))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
arr.reshape((2,8))
array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13, 14, 15]])
arr.reshape((8,2))
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15]])
arr.reshape((1,16))
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15]])

我们需要特别注意-1的使用,numpy会自动生成相应的shape值

arr.reshape((8,-1))
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15]])
arr.reshape((-1,8))
array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13, 14, 15]])

np.linspace函数

用于构建一个等差数列的数组,使用方法为:

np.linspace(
    start,  # 起始值
    stop,  # 终止值,如果endpoint为true,该值包含于数列中
    num=50,  # 生成的样本量,默认为50
    endpoint=True,  #是否包含末尾的值;默认为True
    retstep=False,  #  为True时,生成的数组中会显示间距,反之不
    dtype=None  # 数据类型
)
np.linspace(1,10,5)
array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ])

可以不包含末尾的数值:

np.linspace(1,10,5,endpoint=False)
array([1. , 2.8, 4.6, 6.4, 8.2])

全部是1的等差数列:

# 全部是1的等差数列
np.linspace(1,1,10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

加上restep参数,则会显示步长:

np.linspace(1,10,5,retstep=True)
(array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ]), 2.25)

np.logspace函数

主要是用于生成等比数列,使用方法为:

np.logspace(
    start, # base ** start(指数)
    stop, # base ** stop;如果endpoint为true,该值包含于数列中
    num=50, 
    endpoint=True, 
    base=10.0,  # 默认底数为10
    dtype=None
)
np.logspace(1,5,num=10)
array([1.00000000e+01, 2.78255940e+01, 7.74263683e+01, 2.15443469e+02,
       5.99484250e+02, 1.66810054e+03, 4.64158883e+03, 1.29154967e+04,
       3.59381366e+04, 1.00000000e+05])

指定不同的底数;第一个数为2的0次方,为1:

np.logspace(0,8,num=10,base=2)
array([  1.        ,   1.85174942,   3.42897593,   6.34960421,
        11.75787594,  21.77264   ,  40.3174736 ,  74.65785853,
       138.24764658, 256.        ])
 
 
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载本站qq群955171419,加入微信群请扫码:

2806e8548e495839a6f90f09b474e04b.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值