Python机器学习库(numpy库)

news2024/9/24 1:20:07

文章目录

  • Python机器学习库(numpy库)
    • 1. 数据的维度
    • 2. numpy基础知识
      • 2.1 numpy概述
      • 2.1 numpy概述
      • 2.1 numpy概述
      • 2.2 numpy库的引用
    • 3. ndarray数组的创建
      • 3.1 N维数组对象ndarray
      • 3.2 创建ndarray数组
        • 3.2.1 使用Python列表、元组创建ndarray数组
        • 3.2.2 使用numpy函数创建ndarray数组
      • 3.3 ndarray数组的属性
      • 3.4 ndarray数组的元素类型
      • 3.5 ndarray数组的变换

Python机器学习库(numpy库)

1. 数据的维度

一个数据表达一个含义,而一组数据表达一个或多个含义。

维度:是一组数据的组织形式

一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、数组和集合等概念。

列表:数据类型可以不同
数组:数据类型相同

二维数据:由多个一维数据构成,是一维数据的组合形式。

表格是典型的二维数据,其中,表头是二维数据的一部分

多维数据:由一维或二维数据在新维度上扩展形成。

数据维度的Python表示:

  1. 一维数据:列表和集合类型
  2. 二维数据:列表类型
  3. 多维数据:列表类型
  4. 高维数据:字典类型或其它如JSON、XML和YAML格式

2. numpy基础知识

2.1 numpy概述

numpy是开源的Python科学计算基础库,包含:

  • 强大的N维数组对象ndarray(Array; Matrix)
  • 成熟的(广播)函数库
  • 整合了C/C++/Fortran代码的工具
  • 实用的线性代数、傅里叶变换和随机数生成函数
  • 与稀疏矩阵运算包scipy配合使用更加方便

2.1 numpy概述

numpy是开源的Python科学计算基础库,包含:

  • 强大的N维数组对象ndarray(Array; Matrix)
  • 成熟的(广播)函数库
  • 整合了C/C++/Fortran代码的工具
  • 实用的线性代数、傅里叶变换和随机数生成函数
  • 与稀疏矩阵运算包scipy配合使用更加方便

2.1 numpy概述

numpy是开源的Python科学计算基础库,包含:

  • 强大的N维数组对象ndarray(Array; Matrix)
  • 成熟的(广播)函数库
  • 整合了C/C++/Fortran代码的工具
  • 实用的线性代数、傅里叶变换和随机数生成函数
  • 与稀疏矩阵运算包scipy配合使用更加方便
    在这里插入图片描述
    numpy是SciPy、Pandas等数据处理或科学计算库的基础。它提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库,为进行严格的数字处理而产生。很多大型金融公司,以及核心的科学计算组织如:Lawrence Livermore,NASA都在用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

2.2 numpy库的引用

Anaconda里面已经安装过numpy。

原生Python安装

在控制台中输入:
pip install numpy

安装之后可以导入

import numpy as np
#尽管别名可以省略或更改,但建议使用以上约定俗成的别名“np“

3. ndarray数组的创建

3.1 N维数组对象ndarray

Python已有列表类型,为什么需要一个数组对象(类型)?

标准Python中用list(列表)保存值,可以当做数组使用,但因为列表中的元素可以是任何对象,所以浪费了CPU运算时间和内存。

numpy诞生为了弥补这些缺陷。它提供了两种基本的对象:

  • ndarray:全称(n-dimensional array object)是储存单一数据类型的多维数组。
  • ufunc:全称(universal function object)它是一种能够对数组进行处理的函数。

numpy中文官网

A和B是一维数组,计算A2+B3,示例如下:

# python基础语法方式
def pySum():
    a=[0,1,2,3,4]
    b=[5,6,7,8,9]
    c=[]
    for i in range(len(a)):
        c.append(a[i]+b[i])
    return c
print(pySum())

[5, 7, 9, 11, 13]

# numpy库方式
def npSum():
    a=np.array([0,1,2,3,4])
    b=np.array([5,6,7,8,9])
    return a+b
print(npSum())

[ 5 7 9 11 13]
N维数组对象:ndarray

ndarray是一个多维数组对象,由两部分构成:

  • 实际的数据
  • 描述这些数据的元数据(数据维度、数据类型等)

numpy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型(同质)元素的多维数组。
在这里插入图片描述
ndarray对维数没有限制。
小括号从左到右分别为第0轴,第1轴,第2轴,第3轴。

3.2 创建ndarray数组

ndarray数组的创建方法:

  • 使用Python列表、元组创建ndarray数组
  • 使用numpy函数创建ndarray数组
  • 3.2.1 使用Python列表、元组创建ndarray数组
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)

当np.array()不指定dtype时,numpy将根据数据情况关联一个dtype类型

一维ndarray

import numpy as np
# 一维array
a = np.array([2,23,4], dtype=np.int32) # np.int默认为int32
print(a)
print(a.dtype)

[ 2 23 4]
int32

多维ndarray

# 多维array
a = np.array([[2,3,4],
              [3,4,5]])
print(a) # 生成2行3列的矩阵

[[2 3 4]
[3 4 5]]

c = np.array([(1,2,3),
            [4,5,6],
            (7,8,9)],dtype=np.float32)
c,c.dtype

(array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]], dtype=float32),
dtype(‘float32’))

3.2.2 使用numpy函数创建ndarray数组
函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n‐1
np.ones(shape)根据shape生成一个全1数组,shape是元组类型
np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
np.full(shape,val)根据shape生成一个数组,每个元素值都是val
np.linspace()根据起止数据等间距地填充数据,形成数组
np.empty(shape))创建全空数组每个值都是接近于零的数
np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a)根据数组a的形状生成一个全1数组
np.zeros_like(a)根据数组a的形状生成一个全0数组
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val
np.concatenate()将两个或多个数组合并成一个新的数组

创建连续数组

# 创建连续数组
a = np.arange(10,41,2) # 10-20的数据,步长为2
print(a)

[10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40]

创建全1数据

# 创建全一数据,同时指定数据类型
a = np.ones((3,4),dtype=np.int32)
print(a)

[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
创建全零数组

a = np.zeros((3,4))
print(a) # 生成3行4列的全零矩阵

[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]

创建全特定数值ndarray数组

a=np.full((3,4,5),10)
a.shape,a

((3, 4, 5),
array([[[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]],

[[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]],

[[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]]]))

根据起止数据创建等间距序列数据

# 创建线段型数据
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段
print(a)

[ 1. 1.47368421 1.94736842 2.42105263 2.89473684 3.36842105
3.84210526 4.31578947 4.78947368 5.26315789 5.73684211 6.21052632
6.68421053 7.15789474 7.63157895 8.10526316 8.57894737 9.05263158
9.52631579 10. ]

创建全空数组

# 创建全空数组,其实每个值都是接近于零的数
a = np.empty((3,4))
print(a)

[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]

#将列表转换为矩阵
a=np.eye(5)
print(a)

[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]

3.3 ndarray数组的属性

属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray数组的尺度,对于矩阵,n行m列
.sizendarray数组元素的个数,相当于.shape中n*m的值
.dtypendarray数组的元素类型
.itemsizendarray数组中每个元素的大小,以字节为单位

秩、维度、轴的数量

a=np.full((3,4,5),1.,dtype=np.float32)
print(a)
print('number of dim:', a.ndim)

[[[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. 1. 1. 1. 1.]]

[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]]
number of dim: 3

数组的尺度、行数、列数…

print('shape:',a.shape)

shape: (3, 4, 5)

元素个数

print('size:',a.size)

size: 60

元素类型

print('type:',a.dtype)

type: float32

查看每个元素所占空间的大小,以字节为单位

print('size:',a.itemsize)

size: 4

3.4 ndarray数组的元素类型

数据类型说明
bool布尔类型,True或False
intc与C语言中的int类型一致,一般是int32或int64
intp用于索引的整数,与C语言中size_t一致,int32或int64
int8字节长度的整数,取值:[‐128,127]
int1616位长度的整数,取值:[‐32768,32767]
int3232位长度的整数,取值:[‐231,231‐1]
int6464位长度的整数,取值:[‐263,263‐1]
uint88位无符号整数,取值:[0,255]
uint1616位无符号整数,取值:[0,65535]
uint3232位无符号整数,取值:[0,232‐1]
uint6432位无符号整数,取值:[0,264‐1]
float1616位半精度浮点数:1位符号位,5位指数,10位尾数
float3232位半精度浮点数:1位符号位,8位指数,23位尾数
float6464位半精度浮点数:1位符号位,11位指数,52位尾数
complex64复数类型,实部和虚部都是32位浮点数
complex128复数类型,实部和虚部都是64位浮点数

Python语法仅支持整数、浮点数和复数3种类型,而ndarray为什么要支持这么多种元素类型?

  • 科学计算涉及数据较多,对存储和性能都有较高要求
  • 对元素类型精细定义,有助于numpy合理使用存储空间并优化性能
  • 对元素类型精细定义,有助于程序员对程序规模有合理评估

ndarray数组可以由非同质对象构成,非同质ndarray元素为对象类型,非同质ndarray数组无法有效发挥numpy优势,尽量避免使用。

x=np.array([[0,1,2,3,4],
          [5,6,7,8]],dtype=object)
x.dtype

dtype(‘O’)

dtype(‘O’)显示ndarray数组x中的每个元素是非同质对象类型。

x=np.array([[0,1,2,3,4],
          [5,6,7,8,9]],dtype=object)
x.dtype

dtype(‘O’)

3.5 ndarray数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换。

方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变
.astype()对数组进行类型变换
.tolist()将数据类型转换为列表

reshape操作

a = [ i for i in range(24)]
a=np.array(a)
print(a)
# 使用reshape改变上述数据的形状
b = a.reshape((4,6))
print(b)

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]

b.resize((2,3,4))
b

array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],

[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])

c = b.swapaxes(0,1)
print(c, c.shape)

[[[ 0 1 2 3]
[12 13 14 15]]

[[ 4 5 6 7]
[16 17 18 19]]

[[ 8 9 10 11]
[20 21 22 23]]] (3, 2, 4)

c=b.flatten()
c

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])

ndarray数组的类型变换
new_a = a.astype(new_type)

a=np.ones((2,3,4),dtype=np.int32)
a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1430624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 动态规划 线性DP 数字三角形

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 73 8 8 1 02 7 4 4 4 5 2 6 5 输入格式 …

Quick BI中lod函数之lod_include

一、lod函数简介 LOD函数的全称是详细级别表达式(Level Of Detail Expressisons)。它主要是为了克服一些表达式之间计算颗粒度不一致的问题。比如,要计算第一季度各月销售收入占比,这里分子计算颗粒度为’月’,但是分…

栈的应用:括号匹配问题_有效的括号

假设表达式中允许包含两种括号:圆括号和方括号,嵌套顺序要求: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。 考虑下列括号序列: 分析如下: 计算机…

stable diffusion学习笔记——高清修复

ai画图中通常存在以下痛点: 受限于本地设备的性能(主要是显卡显存),无法跑出分辨率较高的图片。生图的时候分辨率一调大就爆显存。即便显存足够。目前主流的模型大多基于SD1.0和SD1.5,这些模型在训练的时候通常使用小…

机器学习-基础分类算法-KNN详解

KNN-k近邻算法 k-Nearest Neighbors 思想极度简单应用数学只是少效果好可以解释机器学习算法使用过程中的很多细节问题更完整的刻画机器学习应用的流程 创建简单测试用例 import numpy as np import matplotlib.pyplot as plt raw_data_X [[3.393533211, 2.331273381],[3.1…

单片机学习笔记---定时器和中断系统如何连起来工作

前面两节我们分别讲了中断系统和定时器,这节我们看看这两者连起来工作的原理。 说明:看这一节之前一定要先把前两节给看明白了再仔细琢磨这一节的每一张图! 前两节: 单片机学习笔记---中断系统(含外部中断&#xff…

Python基础知识:Python注释及print函数、input函数

在Python中,注释是对相应代码的解释,以增加代码的可读性,让用户能够更好地理解相应代码的含义。注释通过在相应代码后面加上“#”号来实现。比如以下代码 data.describe()#对数据集进行描述性分析 其中data.describe()为需要被执行的代码&a…

网络安全之漏洞扫描

漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。这些缺陷、错误或不合理之处可能被有意或无意地利用,从而对一个组织的资产或运行造成不利影响,如信息系统被攻击或控制…

【高阶数据结构】红黑树

文章目录 前言什么是红黑树红黑树的性质红黑树结点的定义红黑树的插入情况一情况二情况三插入代码总结 验证是否为红黑树红黑树的删除 前言 前面我们学习了 AVL 树——高度平衡的二叉搜索树,AVL 树保证了结点的左右子树的高度差的绝对值不超过 1,也就是…

Nebula Siwi:基于图数据库的智能问答助手思路分析

本文重点分析 Nebula Siwi 智能问答思路,具体代码可参考[2],使用的数据集为 Basketballplayer[3]。部分数据和 schema 如下所示: 一.智能问答可实现的功能 1.Nebula Siwi 源码整体结构 主要包括前段(Vue)和后端&#…

Unity3d C# 在WebGL平台加载并解析xml文件实现总结

前言 xml是可扩展标记语言,由一系列的元素、属性、值节点等构成的一个树形结构,除了可读性差一点,别的用于存储一些结构化的数据还是比较方便的。这个功能在Unity3d端的实现是比较方便快捷的: void GetXML1() {string filePath …

【力扣hot100】刷题笔记Day3

前言 以撒真是一不小心就玩太久了,终于解锁骨哥嘞,抓紧来刷题,今天是easy双指针! 283. 移动零 - 力扣(LeetCode) 一个指针遍历,一个指针用于交换前面的0 class Solution(object):def moveZer…

简单说说mysql的日志

今天我们通过mysql日志了解mysqld的错误日志、慢查询日志、二进制日志,redolog, undolog等。揭示它们的作用和用途,让我们工作中更能驾驭mysql。 redo 日志 如果mysql事务提交后发生了宕机现象,那怎么保证数据的持久性与完整性?…

《计算机网络简易速速上手小册》第6章:网络性能优化(2024 最新版)

文章目录 6.1 带宽管理与 QoS - 让你的网络不再拥堵6.1.1 基础知识6.1.2 重点案例:提高远程办公的视频会议质量实现步骤环境准备Python 脚本示例注意事项 6.1.3 拓展案例1:智能家居系统的网络优化实现思路Python 脚本示例 6.1.4 拓展案例2:提…

挑战杯 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

Megatron-LM源码系列(七):Distributed-Optimizer分布式优化器实现Part2

1. 使用入口 DistributedOptimizer类定义在megatron/optimizer/distrib_optimizer.py文件中。创建的入口是在megatron/optimizer/__init__.py文件中的get_megatron_optimizer函数中。根据传入的args.use_distributed_optimizer参数来判断是用DistributedOptimizer还是Float16O…

QSlider使用笔记

最近做项目使用到QSlider滑动条控件,在使用过的过程中,发现一个问题就是点滑动条上的一个位置,滑块并没有移动到鼠标点击的位置,体验感很差,于是研究了下,让鼠标点击后滑块移动到鼠标点击的位置。 1、event…

this指针详细总结 | static关键字 | 静态成员

文章目录 1.this指针引入2.this指针的特性3.静态成员3.1.C语言中static的基本用法3.2.C中的static关键字 1.this指针引入 class student { public:student(const string& name){ _name name; }void print(){// _name<>this->_name<>(*this)._name// 说一下…

【Linux】打包压缩跨系统/网络传输文件常用指令完结

Hello everybody!在今天的文章中我会把剩下的3-4个常用指令讲完&#xff0c;然后开始权限的讲解。那废话不多说&#xff0c;咱们直接进入正题&#xff01; 1.zip/unzip&tar命令 1.zip/unzip 在windows系统中&#xff0c;经常见到带有zip后缀的文件。那个东西就是压缩包。…

携程网首页案例制作

背景线性渐变 语法&#xff1a; background&#xff1a;linear-gradient&#xff08;起始方向&#xff0c;颜色1&#xff0c;颜色2&#xff0c;...&#xff09;&#xff1b; background&#xff1a;-webkit-linear-gradient&#xff08;left&#xff0c;red&#xff0c;blue&a…