科学计算库—numpy随笔【五一创作】

news2024/12/24 2:15:56

文章目录

          • 8.1、numpy
            • 8.1.1、为什么用 numpy?
            • 8.1.2、numpy 数据类型推理
            • 8.1.3、numpy 指定长度数组快速创建
            • 8.1.4、numpy 哪个是行、列?
            • 8.1.5、numpy 如何进行数据类型转换?
            • 8.1.6、numpy 有几种乘法?
            • 8.1.7、numpy 索引和切片操作
            • 8.1.8、numpy 比较运算
            • 8.1.9、numpy 如何指定行列?
            • 8.1.10、numpy 如何转置?
            • 8.1.11、numpy where 函数
            • 8.1.12、 numpy 如何值替换?
            • 8.1.13、numpy 数学运算

8.1、numpy

本质是多维数组对象

list 类型转为 numpy 数组 更有利科学计算

8.1.1、为什么用 numpy?

1.虽然Python数组结构中的列表list实际上就是数组,但是列表list保存的是对象的指针,list中的元素在系统内存中是分散存储的,例如[0,1,2]需要3个指针和3个整数对象,浪费内存和计算时间。

2.NumPy数组存储在一个均匀连续的内存块中,访问更快;NumPy中的矩阵计算可以采用多线程的方式,计算更快。

结论:numpy 可提供高性能的矩阵运算,作为数组 numpy 提供了许多方便统计计算的功能,数组结构为ndarray。

numpy 和 list 有什么区别?

从存储数据来看,numpy 存储的是矩阵,list 存储的是序列

下面举个例子

li = [1,2,3,4]

Out: [1, 2, 3, 4]

arr = np.array(li)

Out: [1 2 3 4]

8.1.2、numpy 数据类型推理

numpy 会对数据类型进行推理,规则:转为适用性更强的数据类型。

下面举个例子:

在这里插入图片描述

为什么会进行数据类型推理?

numpy 适合处理统一的数值数组数据,数据类型推理就是为了保证数值类型统一。

8.1.3、numpy 指定长度数组快速创建

”零矩阵“

np.zeros()
np.zeros((3,4))
np.zeros((1,3,4))
np.zeros((1,1,3,4))

超出二维后的形式,以np.zeros((1,3,4))为例,嵌套1层,层内3行4列;

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

(1,1,3,4)相比(1,3,4),增加一维,多嵌套一层:

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

(2,1,3,4)相比(1,1,3,4),数值增加,平行矩阵增加:

array([[[[0., 0., 0., 0.],
      [0., 0., 0., 0.],
      [0., 0., 0., 0.]]],


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

补充:

”1矩阵“

np.ones((row,col))
8.1.4、numpy 哪个是行、列?

最后两组数为行和列。

倒是第一组为列,倒数第二组为行(若存在)

8.1.5、numpy 如何进行数据类型转换?
arr = np.array([1.1,1.2,-1,-3.3])

以 arr 为例,将 arr 内的数据类型转为 int32:

arr.astype(np.int32)
8.1.6、numpy 有几种乘法?

四种。

1)星乘(*)

数组的对应元素相乘

arr1 * arr2

2)点乘(np.dot)

就是矩阵乘法

a = np.array([...])
b = np.array([...])
np.dot(a,b)

3)叉乘(np.cross)、外乘(np.outer)

细说NumPy数组的四种乘法的使用

8.1.7、numpy 索引和切片操作

举个例子:

在这里插入图片描述

补充:

花式索引

通过整型数组进行索引

花式索引为什么有两层中括号?

以数组对象 arr 为例,向arr[]中传入数组作为参数,所以才有了两个中括号

在机器学习中常通过使用花式索引来打乱数据集的样本顺序,避免机器学习模型学习到样本的位置噪声,对于监督学习的数据集如果打乱了样本还需要打乱相对应的标签值,样本与标签都是一一对应的关系,使用花式索引能够轻松的解决。

注意,这里有一个问题:

arr = np.arange(12).reshape((3,4))
print(arr[[0,2]])

Out:

[[ 0  1  2  3]
[ 8  9 10 11]]

换一个写法,将 reshape 拆开,无法得到想要的结果(尚不知具体原因):

在这里插入图片描述

8.1.8、numpy 比较运算
names = np.array(['名字1','名字2','名字3'])
sex = np.array(['M','F'])

这里举几个 and、or 的例子:

(names == '名字4') & (sex == 'M')

Out:array([False, False, False])

(names == '名字1') | (names == '名字5')

Out:array([ True, False, False])

8.1.9、numpy 如何指定行列?
arr = np.arange(16)

以 arr 为例,整成 4行4列:

arr.reshape(4,4)

Out:

array([[ 0,  1,  2,  3],
 [ 4,  5,  6,  7],
 [ 8,  9, 10, 11],
 [12, 13, 14, 15]])
8.1.10、numpy 如何转置?

比 list 强大之处,举个例子:

arr = np.arange(24).reshape((3,8))
arr.T#转置

Out:

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

补充:

轴转置

arr 为三维矩阵,初始时刻存在的三个轴下标分别0、1、2,基于下标完成轴转置,如下图:

在这里插入图片描述

8.1.11、numpy where 函数
res = [x if c else y for x,y,c in zip(x_arr,y_arr,conditon)]#list对象
res = np.array(res)#numpy对象

等价表示

res = np.where(condition,x_arr,y_arr) #返回numpy对象

若条件 condition 成立,取 x_arr,否则取 y_arr

8.1.12、 numpy 如何值替换?
arr = np.random.randn(4,4)# 4*4随机矩阵

利用8.1.11提到的where函数,实现值替换,举个例子,将正数替换为5,负数为-5:

arr = np.where(arr>0,5,-5)
8.1.13、numpy 数学运算

1)生成随机矩阵

例如生成一个4*4随机矩阵:

arr = np.random.randn(4,4)

2)平均值、求和

以 arr 对象为例:

arr.mean()#对所有元素
arr.mean(axis = 0)#对各行
arr.mean(axis = 1)#对各列
arr.sum()

3)排序

以 arr 对象为例:

arr.sort()返回的是原数组的“视图”,而不是copy

np.sort(arr)返回的是原数组的copy, 而不是“视图”,当有保留原 arr 需求时用这个

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

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

相关文章

2023年前端面试题汇总-代码输出篇

1. 异步 & 事件循环 1. 代码输出结果 const promise new Promise((resolve, reject) > {console.log(1);console.log(2); }); promise.then(() > {console.log(3); }); console.log(4); 输出结果如下: 1 2 4 promise.then 是微任务,它…

【今日重磅—国产大模型首批内测机会来了】什么是讯飞星火,如何获得内测和使用方法

♥️作者:白日参商 🤵‍♂️个人主页:白日参商主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

数电实验:Quartus II 软件使用 (八进制计数器和全加器)

一、实验目的: 1.熟悉可编程逻辑器件的设计工具Quartus II 软件的使用。 2.熟悉FPGA开发实验系统的软件环境,掌握各个菜单和图标的作用和功能。 二、实验内容 (1)以74160实现八进制计数器为例,学Quartus II 软件的…

【手撕代码系列】JS手写实现Promise.all

Promise.all() 方法接收一个 Promise 对象数组作为参数,返回一个新的 Promise 对象。该 Promise 对象在所有的 Promise 对象都成功时才会成功,其中一个 Promise 对象失败时,则该 Promise 对象立即失败。 本篇博客将手写实现 Promise.all() 方…

Peforce(Helix) 使用快速介绍

虽然Git应该是当下使用最多的版本控管工具, 但曾经作为版本控管巨头的Perforce还是在持续的发展和更新中, 在某些企业中,还是作为软件的版本控管工具之一。 Helix 截止2023, Perforce 的最新版本的名称是Helix ,这个词翻译的意思是螺旋&…

【手撕代码系列】JS手写实现Promise.race

公众号:Code程序人生,分享前端所见所闻。 Promise.race() 是一个常见的 JavaScript Promise 方法,它接受一个 Promise 数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象在传入的 Promise 数组中,任意…

[架构之路-158]-《软考-系统分析师》-13-系统设计 - 高内聚低耦合详解、图解以及技术手段

目录 第1章 什么是高内聚低耦合 1.1 概念 1.2 目的 1.3 什么时候需要进行高内聚低耦合 1.4 什么系统需要关注高内聚、低耦合 第2章 分类 2.1 内聚的分类 2.2 耦合的分类 第3章 增加高内聚降低耦合度的方法 3.1 增加高内聚 3.2 降低耦合度 第1章 什么是高内聚低耦…

seurat -- 关于DE gene的讨论

实例 # 加载演示数据集 library(Seurat) library(SeuratData) pbmc <- LoadData("pbmc3k", type "pbmc3k.final")# list options for groups to perform differential expression on levels(pbmc)## [1] "Naive CD4 T" "Memory CD4 T…

Orangepi Zero2 全志H616(DHT11温湿度检测)

最近在学习Linux应用和安卓开发过程中&#xff0c;打算把Linux实现的温湿度显示安卓app上&#xff0c;于是在此之前先基于Orangepi Zero2 全志H616下的wiringPi库对DHT11进行开发&#xff0c;本文主要记录开发过程的一些问题和细节&#xff0c;主要简单通过开启线程来接收温湿度…

LeetCode1376. 通知所有员工所需的时间

【LetMeFly】1376.通知所有员工所需的时间 力扣题目链接&#xff1a;https://leetcode.cn/problems/time-needed-to-inform-all-employees/ 公司里有 n 名员工&#xff0c;每个员工的 ID 都是独一无二的&#xff0c;编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。…

QML动画分组(Grouped Animations)

通常使用的动画比一个属性的动画更加复杂。例如你想同时运行几个动画并把他们连接起来&#xff0c;或者在一个一个的运行&#xff0c;或者在两个动画之间执行一个脚本。动画分组提供了很好的帮助&#xff0c;作为命名建议可以叫做一组动画。有两种方法来分组&#xff1a;平行与…

SNAP + StaMPS 处理Sentinel-1哨兵1 时间序列

SNAP StaMPS 处理Sentinel-1哨兵1 时间序列 Step0: 文件准备及路径设置 0.1 前往GitHub下载snap2stamps: Github snap2stamps 0.2 新建工作路径&#xff0c;用来进行数据处理&#xff0c;并将下载的snap2stamps解压到该文件夹下&#xff0c;并新建两个文件夹&#xff0c;ma…

二叉搜索树的最小绝对差

1题目 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1示例 2&#xff1a; 输入&#xff1a;r…

证券从业资格证-考前复习

备考2023年6月证券从业资格证&#xff0c;每章思维导图及相关概念&#xff0c;用于考前复习 1. 金融市场基础知识 1.1 第一章 金融市场体系 #mermaid-svg-XEPZZTVBmo6nGm2Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merm…

【14.HTML-移动端适配】

移动端适配 1 布局视口和视觉视口1.1 设置移动端布局视口宽度 2 移动端适配方案2.1 rem单位动态html的font-size&#xff1b;2.2 vw单位2.3 rem和vw对比2.4 flex的弹性布局 1 布局视口和视觉视口 1.1 设置移动端布局视口宽度 避免布局视口宽度默认980px带了的缩放问题,并且禁止…

周赛343(模拟、网格图求最短路、贪心)

文章目录 周赛343[6341. 保龄球游戏的获胜者](https://leetcode.cn/problems/determine-the-winner-of-a-bowling-game/)模拟 技巧 [2661. 找出叠涂元素](https://leetcode.cn/problems/first-completely-painted-row-or-column/)模拟 [2662. 前往目标的最小代价](https://lee…

给jar包编写start和stop脚本

文章目录 前言一、编写脚本1.start.sh2.stop.sh3.restart.sh 二、展示总结 前言 springboot项目内置tomcat,一般都是以jar包形式对外发布服务,我们不能每次都去kill pid,抽到脚本里来做这个事会方便许多。 一、编写脚本 1.start.sh #!/bin/bash APP_NAME"springboot2.3…

基于深度学习的水果检测与识别系统(Python界面版,YOLOv5实现)

摘要&#xff1a;本博文介绍了一种基于深度学习的水果检测与识别系统&#xff0c;使用YOLOv5算法对常见水果进行检测和识别&#xff0c;实现对图片、视频和实时视频中的水果进行准确识别。博文详细阐述了算法原理&#xff0c;同时提供Python实现代码、训练数据集&#xff0c;以…