当前位置: 首页 > news >正文

源码numpy笔记

参考文章
numpy学习
numpy中的浅复制和深复制的详细用法
numpy中的np.where
torch.gather()

Numpy的核心数据结构,就叫做array就是数组,array对象可以是一维数组,也可以是多维数组

array本身的属性

shape:返回一个元组,表示array的维度x.shape
ndim:一个数字,表示array的维度的数目
size:一个数字,表示array中所有数据元素的数目
dtype:array中元素的数据类型

创建array

1.从Python的列表List和嵌套列表创建array,需要用到numpy的array方法
注意n维就有n个右中括号,比如2维,就是([[

>>> a=np.array([1,2])
>>> a
array([1, 2])
>>> b=np.array([[1,2],[2,3]])
>>> b
array([[1, 2],[2, 3]])

2.使用预定函数arange、ones/ones_lik(全为1)e、zeros/zeros_like(全为0)、empty/empty_like(全为空)、full/full_like(指定数值)、eye(单位矩阵)等函数创建
3.生成随机数的np.random模块构建

>>> a=np.arange(2,10,2)
>>> a
array([2, 4, 6, 8])
>>> a=np.random.randn(2,2,2)
>>> a
array([[[ 0.652504  ,  1.16510023],[-0.75828046,  0.95137823]],[[ 0.39619081,  0.54900311],[ 0.94932242, -0.66919562]]])

numpy拷贝

在这里插入图片描述
看这段的时候,在想neighborIdx应该是不会改变的,但是每次用pdb调试的时候,这个矩阵都会改变
其实是因为切片其实是浅拷贝,也就是视图。切片改变,原数组也会改变
也就是b is a,a[:]都是浅拷贝,对应的复制数组变,原数组也变
深拷贝a.copy(),两者互不影响

浅复制:主要有两种方式,简单的赋值或者使用视图(view)
简单的赋值:其实就是制造了一个别名,数组并没有被copy成新的一份,当使用其中一个别名改变数组值的时候,另一个别名对应的值一并改变。也就是b is a

>>>a = np.arange(12)
>>>a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>>b = a
>>>b is a
True
>>>b.shape = 3,4
>>>b
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
>>>a
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])

视图:就是制造了一个原数组的在numpy中定义为view的东西,新视图的base是原数组,区别在于新视图可以和原数组有不同的shape,但当视图的值改变,原数组的值也会发生改变。需要注意的是数组的切片其实就是生成视图的过程。如c = a[:],其实就是生成了和a形状相同的a的view(完全切片)。也就是切片c = a[:]

>>>a
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
>>>c = a.view
>>>c is a
False
>>>c.base is a
True
>>>c.shape = 12
>>>c[0] = 520
>>>a
array([[520,   1,   2,   3],[  4,   5,   6,   7],[  8,   9,  10,  11]])

深复制:就是制作一份原数组的copy了。

>>>d = a.copy()
>>>d[0][0] = 1314
>>>d
array([[1314,    1,    2,    3],[   4,    5,    6,    7],[   8,    9,   10,   11]])
>>>a
array([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])

array索引

简单索引-切片索引
行列用都逗号分隔,:表示从哪到n-1的位置,步长
注意负数,‘-’表示最后,位置为负,表示从最后开始算第一个,步长为负表示从后面开始数
a[x:y:m,:]

>>> a
array([[-0.50549574, -0.68884199, -0.84651543, -1.31251463],[-0.24952212, -0.01200736,  0.31297518,  0.90562104],[-0.88056443,  0.71146101,  0.8669948 ,  0.46530352],[ 0.8001467 ,  0.14129991,  0.29295588, -1.31864503]])
>>> a[1:3:1,:]
array([[-0.24952212, -0.01200736,  0.31297518,  0.90562104],[-0.88056443,  0.71146101,  0.8669948 ,  0.46530352]])
>>> a[-1:1:-1,:]
array([[ 0.8001467 ,  0.14129991,  0.29295588, -1.31864503],[-0.88056443,  0.71146101,  0.8669948 ,  0.46530352]])

神奇索引(用整数数组进行的索引,叫神奇索引)数组里面套数组
这个我也是看了源码才知道,还有这种索引方式
一维数组
indexs = np.array([[0, 2], [1, 3]]) 两行两列对应四个位置索引
也就是a的第0个,第2个组成第1行,第1个,第3个组成第2个

>>> indexs = np.array([[0, 2], [1, 3]])
>>> a=np.arange(2,20,2)
>>> a
array([ 2,  4,  6,  8, 10, 12, 14, 16, 18])
>>> a[indexs]
array([[2, 6],[4, 8]])

可以用到.argsort()方法:会返回从小到大排序后的索引index
这个方法也在论文源码中常常用到


# 随机生成1到100之间的,10个数字
>>> arr = np.random.randint(1,100,10)
>>> arr
array([56, 74, 87, 82, 26, 23, 15, 12, 84, 48])
>>> arr.argsort()
array([7, 6, 5, 4, 9, 0, 1, 3, 8, 2], dtype=int64)
>>> arr.argsort()[-3:]
array([3, 8, 2], dtype=int64)
>>> arr[arr.argsort()[-3:]]
array([82, 84, 87])

二维数组
注意a[[0,2]]和a[0,2]不同!!!!
注意筛选多列时,行不可省略
描述形式就是两个中括号,一个表示行,一个表示列

>>> a=np.arange(20).reshape(4,5)
>>> a
array([[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14],[15, 16, 17, 18, 19]])
>>> a[[0,2]]
array([[ 0,  1,  2,  3,  4],[10, 11, 12, 13, 14]])
>>> a[0,2]
2
>>> a[:,[0,1,2]]
array([[ 0,  1,  2],[ 5,  6,  7],[10, 11, 12],[15, 16, 17]])
>>> a[[0, 2, 3], [1, 3, 4]]
array([ 1, 13, 19])

布尔索引

相关文章:

源码numpy笔记

参考文章 numpy学习 numpy中的浅复制和深复制的详细用法 numpy中的np.where torch.gather() Numpy的核心数据结构,就叫做array就是数组,array对象可以是一维数组,也可以是多维数组 array本身的属性 shape:返回一个元组&#xf…...

【VUE】六 路由和传值

目录 一、 路由和传值 二、案例 三、案例存在无法刷新问题 一、 路由和传值 当某个组件可以根据某些参数值的不同,展示不同效果时,需要用到动态路由。 例如:访问网站看到课程列表,点击某个课程,就可以跳转到课程详…...

ChatGPT修炼指南和它的电力畅想

近期,ChatGPT刷屏各大社交平台,无疑成为人工智能界最靓的仔! 身为一款“会说话”的聊天机器人程序,它与前辈产品Siri、小度、微软小冰等有什么不同?先来听听小伙伴们怎么说。 ChatGPT何以修炼得这么强大?…...

基于vscode开发vue项目的详细步骤教程

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 目录 五、vscode集成npm开发vue项目 1、vscode安装所需要的插件: 2、搭建一个vue小页面(入门vue) 3、大致理解…...

【C++初阶】1. C++入门

1. 前言 1. 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(…...

数据结构与算法(二十)快速排序、堆排序(四)

数据结构与算法(三)软件设计(十九)https://blog.csdn.net/ke1ying/article/details/129252205 排序 分为 稳定排序 和 不稳定排序 内排序 和 外排序 内排序指在内存里,外排序指在外部存储空间排序 1、排序的方法分类。 插入排序&#xff…...

TensorRT量化工具pytorch_quantization代码解析(二)

有些地方看的不是透彻,后续继续补充! 继续看张量量化函数,代码位于:tools\pytorch-quantization\pytorch_quantization\tensor_quant.py ScaledQuantDescriptor 量化的支持描述符:描述张量应该如何量化。QuantDescriptor和张量…...

buu [BJDCTF2020]easyrsa 1

题目描述 : from Crypto.Util.number import getPrime,bytes_to_long from sympy import Derivative from fractions import Fraction from secret import flagpgetPrime(1024) qgetPrime(1024) e65537 np*q zFraction(1,Derivative(arctan(p),p))-Fraction(1,Deri…...

taobao.user.openuid.getbyorder( 根据订单获取买家openuid )

¥免费不需用户授权 根据订单获取买家openuid,最大查询30个 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 请求示例 TaobaoClient client new DefaultTaobaoClient(url, appkey, secret); UserOpenuidGetbyorderR…...

Mac iTerm2 rz sz

1、安装brew(找了很多🔗,就这个博主的好用) Mac如何安装brew?_行走的码农00的博客-CSDN博客_mac brew 2、安装lrzsz brew install lrzsz 检查是否安装成功 brew list 定位lrzsz的安装目录 brew list lrzsz 执…...

高通平台开发系列讲解(Sensor篇)Gsensor基础知识

文章目录 一、什么是SENSOR?二、Sensor的分类及作用三、Gsensor的工作原理及介绍3.1、常见Gsensor3.2、Gsensor的特性沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 Sensor 基础 一、什么是SENSOR? 传感器(英文名称:sensor )是一种检测装置,能感…...

图像处理实战--Opencv实现人像迁移

前言: Hello大家好,我是Dream。 今天来学习一下如何使用Opencv实现人像迁移,欢迎大家一起参与探讨交流~ 本文目录:一、实验要求二、实验环境三、实验原理及操作1.照片准备2.图像增强3.实现美颜功能4.背景虚化5.图像二值化处理6.人…...

OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果

在Centos7上部署OnlyOffice编译结果 此处将尝试将OnlyOffice验证(一)DocumentServer编译验证的结果部署到Centos7上。并且使用其它服务器现有的RabbitMq和Mysql。 安装Nginx 先安装Nginx需要的依赖环境: yum install openssl* -y yum insta…...

6.补充和总结【Java面试第三季】

6.补充和总结【Java面试第三季】前言推荐6.补充和总结69_总结闲聊回顾和总结继续学习最后前言 2023-2-4 19:08:01 以下内容源自 【尚硅谷Java大厂面试题第3季,跳槽必刷题目必扫技术盲点(周阳主讲)-哔哩哔哩】 仅供学习交流使用 推荐 Jav…...

基于ssm框架大学生社团管理系统(源码+数据库+文档)

一、项目简介 本项目是一套基于ssm框架大学生社团管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,确保可…...

vulnhub靶场NAPPING: 1.0.1教程

靶场搭建靶机下载地址:Napping: 1.0.1 ~ VulnHub直接解压双击ova文件即可使用软件:靶机VirtualBox,攻击机VMware攻击机:kali信息收集arp-scan -l上帝之眼直接来看看网站可以注册账号,那就先试试。注册完后登入哦。要输…...

Docker基本介绍

最近需要将项目做成一个web应用并部署到多台服务器上,于是就简单学习了一下docker,做一下小小的记录。 1、简单介绍一下docker 我们经常遇到这样一个问题,自己写的代码在自己的电脑上运行的很流畅,在其他人电脑上就各种bug&…...

可用于标记蛋白质216699-36-4,6-ROX,SE,6-羧基-X-罗丹明琥珀酰亚胺酯

一.6-ROX,SE产品描述:6-羧基-X-罗丹明琥珀酰亚胺酯(6-ROX,SE)是一种用于寡核苷酸标记和自动DNA测序的荧光染料,可用于标记蛋白质,寡核苷酸和其他含胺分子的伯胺(-NH2)。西…...

高数:极限的定义

目录 极限的定义: 数列极限的几何意义: 由极限的定义得出的极限的两个结论: ​编辑 极限的第三个结论: 例题 方法1: ​编辑 方法2: ​编辑 方法3: ​编辑 极限的定义: 如何理…...

大数据技术之Hadoop

第1章 Hadoop概述1.1 Hadoop是什么1.2 Hadoop发展历史(了解)1.3 Hadoop三大发行版本(了解)Hadoop三大发行版本:Apache、Cloudera、Hortonworks。Apache版本最原始(最基础)的版本,对于…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...