numpy学习笔记,不定期更新

numpy类型入门

import numpy库后,通过numpy参数操作示例

import numpy as np# 创建ndarray,通过list创建
a = np.array([1, 2, 3])
print(a)
[1 2 3]
# 通过元组创建ndarray,并指定数据类型为float (此处是python的float类型,不是numpy的float类型)
b = np.array((2, 3, 4), dtype=float)
print("值", b, ", 类型", b.dtype)
值 [2. 3. 4.] , 类型 float64
# 创建复数类型
c = np.array([1+2j, 3+4j, 5+6j])
print("value:", c, ", type:", c.dtype)
value: [1.+2.j 3.+4.j 5.+6.j] , type: complex128
d = np.array(["你好", "hello", "world"])
print("value:", d, ", type:", d.dtype)
value: ['你好' 'hello' 'world'] , type: <U5
f = np.array([b"hello", b'world'])
print("value:", f, ", type:", f.dtype)
value: [b'hello' b'world'] , type: |S5

数据类型分为python的类型,与numpy的类型
比如:int_, intc, int8, int16, float16…等等。是numpy的数据类型,在使用是需要有numpy前缀

type01 = np.array([1, 2, 3], dtype = np.int8)
type01
array([1, 2, 3], dtype=int8)

小端与大端:存储时数据头尾与内存前后的关系相反

dt = np.dtype('<u4') # uint32位,小端存储
g = np.array([1, 2, 3], dtype = dt)
print(g, g.dtype)
[1 2 3] uint32

通过astype()可以转换array元素的数据类型,如果转换类型不兼容会报错

h = np.array(["1", "2.3", "4.5"])
ht = h.astype("f4") # f4: float32
ht
array([1. , 2.3, 4.5], dtype=float32)

3. numpy中的几种数组函数

numpy中数组的3个基础函数

  1. arange 数列
  2. linspace 线性等分向量,等差数列
  3. logspace 对数等分向量,等比数列

一些基础概念:

  • 标量:0维数组
  • 向量(矢量):一维数组
  • 矩阵:二维数组
  • 张量:三维以上数组

3.3.1 使用arange函数

arange函数创建数值范围并返回数组对象,与python中range函数类似。语法格式如下:

numpy.arange([start,] stop, [step,] dtype=None)
  • start:开始值,可以省略,默认为0, 开始值包含在数组里
  • stop:结束值,不包含在数组里
  • step:步长,默认值为1,步长可以是负数,表示递减
  • dtype:数组元素类型
a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a = np.arange(1, 10, 2)
a
array([1, 3, 5, 7, 9])
a = np.arange(1, -10, -3, dtype=np.float32)
a
array([ 1., -2., -5., -8.], dtype=float32)

3.3.2 等差数列与linspace函数

linsapce函数创建等差数列,语法格式如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  • start:开始值,包含
  • stop:结束值,默认包含,通过endpoint可以调整是否包含
  • num:生成元素个数
  • endpoint:是否包含stop
  • retstep:是否返回步长(公差),False不返回,True返回。设置为True时,函数返回值是二元数组(数组,步长)
a = np.linspace(0, 10, 10)
a
array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])
a = np.linspace(0, 10, 10, retstep=True)
a
(array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ]),1.1111111111111112)

当retstep=True时,函数返回内容为二元数组,第一个元素是等差数列,第二个元素是步长

a[1]
1.1111111111111112

3.3.3 等比数列与logspace函数

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
  • start:开始值,base ** start,base的start次幂
  • stop:结束值,base ** stop, base的stop次幂
  • base:底数,默认以10为底
  • num:生成元素个数
  • endpoint:是否包含stop
a = np.logspace(0, 9, 10)
a
array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06, 1.e+07,1.e+08, 1.e+09])

1e+1:1乘以10的1次方
ne+x: n乘以10的x次方

a = np.logspace(0, 9, 10, base=2)
a
array([  1.,   2.,   4.,   8.,  16.,  32.,  64., 128., 256., 512.])

3.3.4 练习

  1. 从给定数组里获取奇数
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
arr2 = arr[arr % 2 == 1]
arr2
array([1, 3, 5])
  1. 创建介于2.5到6.5之间的30个均匀间隔元素的一维数组,包括6.5
arr = np.linspace(2.5, 6.5, num=30, endpoint=True, retstep=True)
arr
(array([2.5       , 2.63793103, 2.77586207, 2.9137931 , 3.05172414,3.18965517, 3.32758621, 3.46551724, 3.60344828, 3.74137931,3.87931034, 4.01724138, 4.15517241, 4.29310345, 4.43103448,4.56896552, 4.70689655, 4.84482759, 4.98275862, 5.12068966,5.25862069, 5.39655172, 5.53448276, 5.67241379, 5.81034483,5.94827586, 6.0862069 , 6.22413793, 6.36206897, 6.5       ]),0.13793103448275862)

4. 二维数组

4.1 创建二位数组

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

4.2 重新设置维度

shape属性可以返回数组的形状,简单理解为:几乘几

a.shape
(3, 3)
数组对象的reshape方法可以修改数组形状
a = np.arange(0, 10)
print("a:", a)
# 将一维数组设置成2行5列的二维数组
a = a.reshape(2, 5)
print("a reshape:", a)b = np.arange(0, 27)
print("b:", b)
# 将一维数组b reshape成3*3*3的三维数组
b = b.reshape(3, 3, 3)
print("b reshape:", b)
a: [0 1 2 3 4 5 6 7 8 9]
a reshape: [[0 1 2 3 4][5 6 7 8 9]]
b: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 2324 25 26]
b reshape: [[[ 0  1  2][ 3  4  5][ 6  7  8]][[ 9 10 11][12 13 14][15 16 17]][[18 19 20][21 22 23][24 25 26]]]

4.3 更多创建二维数组的方式

  • ones:创建元素都是1的数组
  • zeros:创建元素都是0的数组
  • empty
  • full
  • eye , identity
4.3.1 ones函数根据指定的形状和数据类型生成全为1的数组,语法如下:
numpy.ones(shape, dtype=None)

dtype不指定时,float

a = np.ones((2, 3))
a
array([[1., 1., 1.],[1., 1., 1.]])
a = np.ones((2, 3), dtype=np.int32)
a
array([[1, 1, 1],[1, 1, 1]])
4.3.2 zeros函数,与ones用法类似,区别在于元素值是0
4.3.2 empty函数,与ones用法类似,区别在于元素值是未初始化的

未初始化:内存里保存的是原始值,可能是空,也可能是上一次操作后保留在内存里的值

e = np.empty((2, 3))
e
array([[0., 0., 0.],[0., 0., 0.]])
e = np.empty((3, 7))
e
array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306,1.29061414e-306, 8.34441742e-308, 8.90104239e-307,1.33511290e-306],[1.42417221e-306, 1.60220393e-306, 1.02359848e-306,3.11525958e-307, 1.69118108e-306, 8.06632139e-308,1.20160711e-306],[1.69119330e-306, 1.29062229e-306, 6.89804133e-307,1.11261162e-306, 8.34443015e-308, 1.42404727e-306,3.39986383e-317]])
上面e = np.empty((3, 7))执行后,e的内容不是0,而是上次内存操作后留下的值
3.3.4 full函数

full函数根据指定的形状和数据类型生成数组,并用指定的数据填充,语法格式如下:

numpy.full(shape, fill_value, dtype=None)
# 创建2行4列,元素value都是10的二维数组
a = np.full((2, 4), 10)
a
array([[10, 10, 10, 10],[10, 10, 10, 10]])
# 创建5个元素的一维数组,每个元素value都是3
a = np.full(5, 3, dtype=np.float32)
a
array([3., 3., 3., 3., 3.], dtype=float32)
4.3.5 identity和eye函数
  1. identity函数用来创建单位矩阵,即:对角线元素为1,其他元素为0的正方形矩阵。
    语法格式如下:
numpy.identity(n, dtype=None)
  1. eye函数用来创建二维数组,对角线元素为1,其他元素为0,
    语法格式如下
numpy.eye(N, M=None, k=0, dtype=float)
  • N:行数
  • M:列数,如果省略,则M=N
  • k:对角线开始位置的索引,默认是0,主对角线。
  • dtype:元素数据类型,默认是float
i = np.identity(3)
i
array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])
e = np.eye(3, 4, 0, dtype=np.int32)
e
array([[1, 0, 0, 0],[0, 1, 0, 0],[0, 0, 1, 0]])
4.3.6 二维数组的轴

简单来说,二维数组的行:0轴,二维数组的列:1轴

x = np.array([['a', 'b', 'c', 'd', 'e'], ['h', 'i', 'j', 'k', 'l'], ['o', 'p', 'q', 'r', 's']])
x
array([['a', 'b', 'c', 'd', 'e'],['h', 'i', 'j', 'k', 'l'],['o', 'p', 'q', 'r', 's']], dtype='<U1')
# 通过轴获取二维数组中对应的元素:
x[2, 3]
# 其实就是几行几列
'r'

4.6 数组转置

数组的T属性可以转置数组,将数组轴的索引倒置。说人话就是行专列,列转行

  • 一维数组转置无意义,转置无效果
  • 形状为(n, m),转置后形状为(m, n)
  • 数组形状为(a0, a1, …, an-1, an),转置后形状为(an, an-1, …, a1, a0)
t1 = np.array([[1, 2, 3], [4, 5, 6]])
t1
array([[1, 2, 3],[4, 5, 6]])
# 使用T属性转置多维数组
t1.T
array([[1, 4],[2, 5],[3, 6]])

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

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

相关文章

从石膏像到真人:素描的进步之路

从石膏像绘画到真人绘画&#xff1a;素描的进步之路怎么走 从石膏像绘画到真人绘画&#xff0c;素描的进步之路可以通过以下几个步骤来实现&#xff1a; 掌握基本技能&#xff1a;在开始真人绘画之前&#xff0c;需要先掌握基本的素描技能&#xff0c;包括构图、明暗关系、观察…

物理层习题及其相关知识(谁看谁不迷糊呢)

1. 对于带宽为50k Hz的信道&#xff0c;若有4种不同的物理状态来表示数据&#xff0c;信噪比为20dB 。&#xff08;1&#xff09; 按奈奎斯特定理&#xff0c;信道的最大传输数据速率是多少&#xff1f;&#xff08;2&#xff09; 按香农定理&#xff0c;信道的最大传输数据速度…

PSI相关存档

https://anquan.baidu.com/upload/ue/file/20190814/1565763561975581.pdf 关于PSI的研究综述_psi综述-CSDN博客 https://zhuanlan.zhihu.com/p/532761749 https://zhuanlan.zhihu.com/p/407290294 隐私集合求交(Private Set Intersection)问题综述 - 知乎 (zhihu.com) Pr…

基于Springboot+Vue实现前后端分离酒店管理系统

一、&#x1f680;选题背景介绍 &#x1f4da;推荐理由&#xff1a; 近几年来&#xff0c;随着各行各业计算机智能化管理的转型&#xff0c;以及人们经济实力的提升&#xff0c;人们对于酒店住宿的需求不断的提升&#xff0c;用户的增多导致酒店管理信息的不断增多&#xff0c;…

ICLR 2024 | 联邦学习后门攻击的模型关键层

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 联邦学习使多个参与方可以在数据隐私得到保护的情况下训练机器学习模型。但是由于服务器无法…

华为分红出炉,人均超50w!

华为分红 770 亿 4 月 2 日&#xff0c;北京金融资产交易所官网发布了《华为投资控股有限公司关于分配股利的公告》。 公告指出&#xff1a;经公司内部有权机构决议&#xff0c;拟向股东分配股利约 770.945 亿元。 众所周知&#xff0c;华为并不是一家上市公司&#xff0c;这里…

C++从入门到精通——初步认识面向对象及类的引入

初步认识面向对象及类的引入 前言一、面向过程和面向对象初步认识C语言C 二、类的引入C的类名代表什么示例 C与C语言的struct的比较成员函数访问权限继承默认构造函数默认成员初始化结构体大小 总结 前言 面向过程注重任务的流程和控制&#xff0c;适合简单任务和流程固定的场…

详解Qt中的布局管理器

Qt中的布局管理是用于组织用户界面中控件&#xff08;如按钮、文本框、标签等&#xff09;位置和尺寸调整的一种机制。说白了就是创建了一种规则&#xff0c;随着窗口变化其中的控件大小位置跟着变化。Qt提供了多种布局管理器&#xff0c;每种都有其特定用途和特点。以下是对Qt…

使用open3d分离背景和物体点云(二)

一、代码 Python import cv2 import open3d as o3d import matplotlib.pyplot as plt import numpy as npdef thPlaneSeg(pointcloud):pcd_np = np.asarray(pointcloud.points)# 设置深度阈值 (假设Z轴是深度轴)depth_threshold = 0.196 # 1.0米# 应用深度阈值,移除远于阈值…

自定义实现shell/bash

文章目录 函数和进程之间的相似性shell打印提示符&#xff0c;以及获取用户输入分割用户的输入判断是否是内建命令执行相关的命令 全部代码 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#…

vue项目打包

Vue项目打包的步骤如下&#xff1a; 确保环境配置正确&#xff1a;首先&#xff0c;确保你的开发环境已经安装了Node.js和npm&#xff08;Node.js的包管理器&#xff09;。Vue项目通常使用npm或yarn作为包管理器来安装依赖。 安装项目依赖&#xff1a;在项目根目录下&#xff…

Day30 线程安全之窗口售票问题(含代码)

Day30 线程安全之窗口售票问题&#xff08;含代码&#xff09; 一、需求&#xff1a; 铁道部发布了一个售票任务&#xff0c;要求销售1000张票&#xff0c;要求有3个窗口来进行销售&#xff0c; 请编写多线程程序来模拟这个效果&#xff08; 注意&#xff1a;使用线程类的方式…

【Qt 学习笔记】详解Qt中的信号和槽

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 详解Qt中的信号与槽 文章编号&#xff1a;Qt 学习笔记 / 12 文章目录…

红黑树的平衡之道:深入解析右旋操作的原理与实践

红黑树的平衡之道&#xff1a;深入解析右旋操作的原理与实践 一、 红黑树旋转的背景二、右旋&#xff08;RIGHT-ROTATE&#xff09;的原理三、右旋&#xff08;RIGHT-ROTATE&#xff09;的算法步骤四、右旋&#xff08;RIGHT-ROTATE&#xff09;的伪代码五、右旋&#xff08;RI…

C语言-角谷步数

题目描述 你听说过角谷猜想吗&#xff1f; 任意的正整数&#xff0c;比如 5&#xff0c;我们从它开始&#xff0c;如下规则计算&#xff1a; 如果是偶数&#xff0c;则除以2&#xff1b;如果是奇数&#xff0c;则乘以 3 再加 1。 如此循环&#xff0c;最终必会得到 1&#xff…

ctf_show笔记篇(web入门---jwt)

目录 jwt简介 web345&#xff1a; web346&#xff1a; web347&#xff1a; web348: web349&#xff1a; web350&#xff1a; jwt简介 JSON Web Token&#xff08;JWT&#xff09;通常由三部分组成 Header&#xff08;头部&#xff09;&#xff1a;包含了两部分信息&…

蓝桥杯备考3

P8196 [传智杯 #4 决赛] 三元组 题目描述 给定一个长度为 n 的数列 a&#xff0c;对于一个有序整数三元组 (i,j,k)&#xff0c;若其满足 1≤i≤j≤k≤n 并且&#xff0c;则我们称这个三元组是「传智的」。 现在请你计算&#xff0c;有多少有序整数三元组是传智的。 输入格式…

LRU的原理与实现(java)

介绍 LRU的英文全称为Least Recently Used&#xff0c;即最近最少使用。它是一种内存数据淘汰算法&#xff0c;当添加想要添加数据而内存不足时&#xff0c;它会优先将最近一段时间内使用最少的数据淘汰掉&#xff0c;再将数据添加进来。 原理 LRU的原理在介绍中就已经基本说…

机器学习模型——逻辑回归

https://blog.csdn.net/qq_41682922/article/details/85013008 https://blog.csdn.net/guoziqing506/article/details/81328402 https://www.cnblogs.com/cymx66688/p/11363163.html 参数详解 逻辑回归的引出&#xff1a; 数据线性可分可以使用线性分类器&#xff0c;如果…

蓝桥真题--路径之谜DFS解法

路径之谜 思路 前置知识&#xff1a;深度搜索模板搜索所有可以找的路径&#xff0c;将走过的靶子减去一走到最后一个格子的时候&#xff0c;直接去判断所有的靶子只有除最后一个位置的靶子&#xff0c;其余靶子都归零的时候&#xff0c;判断一个最后一个位置横坐标和纵坐标的靶…