一、 数组元素值的替换

我们可以使用索引或 where () 函数来替换 NumPy 数组中的元素值。

1.1 方式一:索引
import numpy as npnp.random.seed(42)a3 = np.random.randint(0, 10, size=(3, 4))print("原数组:\n", a3)a3\[1] = 0  # 将a3数组第一行数据全部更换为0print("替换后数组:\n", a3)a3\[1] = np.array(\[1, 2, 3, 4])  # 将a3数组第一行数据更换为 \[1, 2, 3, 4]print("再次替换后数组:\n", a3)
1.2 方式二:条件索引
import numpy as npnp.random.seed(42)a3 = np.random.randint(0, 10, size=(3, 4))print("原数组:\n", a3)a3\[a3 < 3] = 1  # 数组中值小于3的元素全部替换为1print("条件替换后数组:\n", a3)
1.3 方式三:where () 函数
import numpy as npnp.random.seed(42)a3 = np.random.randint(0, 10, size=(3, 4))print("原数组:\n", a3)result = np.where(a3 < 5, 0, 1)  # 将a3数组中小于5的值替换为0,剩余值替换为1print("使用where()替换后数组:\n", result)

二、 数组的广播机制

数组的广播机制允许形状不同的数组进行运算,只要它们的形状是兼容的。广播机制的基本原则是:如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相同或其中一方的长度为 1,则认为它们是广播兼容的。广播会在缺失和(或)长度为 1 的维度上进行。

2.1 广播原则
  • 如果两个数组的后缘维度的轴长度相同或其中一方的长度为 1,则认为它们是广播兼容的。

  • 广播会在缺失和(或)长度为 1 的维度上进行。

示例:

  • shape 为 (3,8,2) 的数组能和 shape 为 (8,1) 的数组进行运算吗?是。

  • shape 为 (3,1,8) 的数组能和 shape 为 (8,1) 的数组进行运算吗?是。

2.2 数组与数字运算
import numpy as npa = np.random.randint(0, 5, size=(3, 5))print(a)a = a \* 2.345print(a.round(2))  # 数组中的所有元素都乘以2.345,并保留2位小数
2.3 数组与数组运算
import numpy as npa1 = np.random.randint(0, 5, size=(3, 5))a2 = np.random.randint(0, 5, size=(3, 5))print(a1 + a2)  # 数组形状一致时,各个元素相加减(满足数组广播机制)a3 = np.random.randint(0, 5, size=(3, 4))\# a1 + a3  # 报错,形状不一致的数组不能相加减(不满足数组广播机制)

三、 数组形状的操作

3.1 数组形状的改变

(1) reshape 与 resize

import numpy as npa1 = np.random.randint(0, 10, size=(3, 4))print(a1)a2 = a1.reshape((2, 6))  # reshape是将数组转换成指定的形状,然后返回转换后的结果,原数组的形状不会发生改变print(a2)a1.resize((4, 3))  # resize是将数组转换成指定的形状,会直接修改数组本身,并且不会返回任何值print(a1)

(2) flatten 与 ravel

import numpy as npa3 = np.array(\[\[6, 9, 1, 6], \[4, 9, 4, 8], \[7, 0, 6, 0]])print(a3)a4 = a3.flatten()  # flatten将多维数组转换为一维数组,并返回一个拷贝,后续对这个返回值的修改不会影响原数组a4\[0] = 100print("flatten后:", a4)print("原数组\[0,0]:", a3\[0, 0])a5 = a3.ravel()  # ravel将多维数组转换为一维数组,并返回一个视图,后续对这个返回值的修改会影响原数组a5\[0] = 200print("ravel后:", a5)print("原数组\[0,0]:", a3\[0, 0])
3.2 数组的叠加

(1) 垂直方向叠加的两种方式

import numpy as npv1 = np.random.randint(0, 10, size=(3, 4))v2 = np.random.randint(0, 10, size=(2, 4))v3 = np.vstack(\[v1, v2])  # 垂直方向叠加v4 = np.concatenate(\[v1, v2], axis=0)  # 垂直方向叠加print(v3)print(v4)

(2) 水平方向叠加的两种方式

import numpy as nph1 = np.array(\[\[5, 0, 8, 6], \[8, 5, 1, 8], \[4, 3, 6, 3]])h2 = np.array(\[\[4], \[5], \[3]])h3 = np.hstack(\[h1, h2])  # 水平方向叠加h4 = np.concatenate(\[h1, h2], axis=1)  # 水平方向叠加print(h3)print(h4)

(3) 先将数据拉伸转换成一维数组,再拼接

import numpy as npnp.random.seed(42)h1 = np.random.randint(0, 10, size=(3, 4))h2 = np.random.randint(0, 10, size=(3, 1))h5 = np.concatenate(\[h1, h2], axis=None)  # 先拉伸转换成一维数组,再拼接print(h5)
3.3 数组的切割

(1) 水平方向切割

import numpy as npnp.random.seed(42)hs1 = np.random.randint(0, 10, size=(3, 4))print(hs1)print(np.hsplit(hs1, 2))  # 水平方向平均分为2份(要求列数可被2整除)print(np.hsplit(hs1, (1, 2)))  # 水平方向分为1,1,2列(在下标为1,2处切割)

(2) 垂直方向切割

import numpy as npvs1 = np.array(\[\[6, 3, 7, 4, 6], \[9, 2, 6, 7, 4], \[3, 7, 7, 2, 5], \[4, 1, 7, 5, 1]])print(vs1)print(np.vsplit(vs1, 4))  # 垂直方向平均分为4份print(np.vsplit(vs1, (1, 3)))  # 垂直方向分为1,2,1份(在下标为1,3处切割)

(3) 指定切割方式

import numpy as nparr = np.array(\[\[1, 2, 7, 9], \[9, 7, 7, 8], \[3, 1, 2, 6]])print(np.split(arr, 4, axis=1))  # 按列平均切割print(np.split(arr, 4, axis=0))  # 按行平均切割
3.4 矩阵转置

(1) 通过 ndarray.T 进行转置

import numpy as npt1 = np.random.randint(0, 10, size=(3, 4))print(t1)print(t1.T)  # 数组t1转置print(t1.dot(t1.T))  # 矩阵相乘

(2) 通过 ndarray.transpose () 进行转置

import numpy as npt2 = t1.transpose()t2\[0, 0] = 99  # 修改会影响原来的数组print(t2)print(t1)

四、 Axis 理解

在 NumPy 中,axis 是指数组的某个维度,用于指定对数组进行操作时沿着哪个维度进行操作。

4.1 Axis

axis 用于指定轴是行还是列,默认 axis=0。axis=0 代表沿着行的方向进行操作,axis=1 代表沿着列的方向进行操作。

(1) 求 x 数组在 axis=0 和 axis=1 两种情况下的和

import numpy as npx = np.array(\[\[0, 1], \[2, 3]])print(x.sum(axis=0))  # 按列求和print(x.sum(axis=1))  # 按行求和

(2) 用 np.max 求 axis=0 和 axis=1 两种情况下的最大值

import numpy as npnp.random.seed(100)x = np.random.randint(1, 10, size=(3, 5))print(x)print(x.max(axis=0))  # 按列求最大值print(x.max(axis=1))  # 按行求最大值

(3) 用 np.delete 在 axis=0 和 axis=1 两种情况下删除元素

import numpy as npnp.random.seed(100)x = np.random.randint(1, 10, size=(3, 5))print(x)print(np.delete(x, 0, axis=0))  # 删除第0行print(np.delete(x, 0, axis=1))  # 删除第0列

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

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

相关文章

遥感图像语义分割1-安装mmsegmentation

参考&#xff1a; mmsegmentation: 安装并使用自定义数据集进行训练_mmsegmentation安装-CSDN博客 最新Windows配置安装mmcv与mmsegmentation&#xff0c;以及mmsegmentation的验证_mmcv安装-CSDN博客 GitCode - 全球开发者的开源社区,开源代码托管平台 参考&#xff1a; …

【菜狗的记录】模糊聚类最大树、图神经网络、大模型量化——20250627

每日学习过程中记录的笔记&#xff0c;从各个网站整理下来&#xff0c;用于当日复盘。 如果其中的知识点能帮到你&#xff0c;也很荣幸呀。 -------------------------------------------------------20250622------------------------------------------------------------- …

《短剧平台开发指南:技术方案、核心功能与行业趋势》

一、短剧行业现状与系统开发价值 近年来&#xff0c;短剧市场呈现爆发式增长&#xff0c;成为数字内容领域的新风口。数据显示&#xff0c;2023年国内短剧市场规模已突破300亿元&#xff0c;用户规模达到4.5亿。这种以"短、平、快"为特点的内容形式&#xff0c;凭借…

[FPGA]嵌入式系统FPGA设计资源

嵌入式系统FPGA设计资源 一、供应商 https://www.altera.com- Altera FPGA 供应商网站 https://www.altera.com/events/northamerica/intel-soc-fpga-developer-forum/overview.html- SoC 开发人员论坛 https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/li…

ClickHouse 可观测性最佳实践

ClickHouse 介绍 ClickHouse 是一款高性能、列式存储的开源分析型数据库&#xff0c;专为在线分析处理&#xff08;OLAP&#xff09;场景设计。它能够处理海量数据&#xff0c;支持实时查询和复杂的数据分析&#xff0c;具备极高的读写性能和数据压缩能力。ClickHouse 提供了强…

Android Framework设置时间为24小时制

文章目录 定位源码实现附录12 小时制与 24 小时制的详细解析一、基本定义与核心区别二、转换方法与示例三、应用场景与文化差异四、延伸知识&#xff1a;特殊计时制与历史背景 目的是把设置中使用默认语言区域关掉&#xff0c;并把使用24小时制打开 如下图为原始的&#xff1a;…

基于STM32设计的扫地机器人

一、前言 1.1 项目介绍 【1】项目开发背景 随着社会节奏的加快和人们生活方式的改变&#xff0c;智能家居产品逐渐走入千家万户。作为智能清洁系统的重要组成部分&#xff0c;扫地机器人凭借其自动化、高效性和便捷性&#xff0c;成为现代家庭中不可或缺的智能设备之一。传统…

什么是接口测试?

2025最新Jmeter接口测试从入门到精通&#xff08;全套项目实战教程&#xff09; 接口测试概念 接口测试是项目测试的一部分&#xff0c;它测试的主要对象是接口&#xff0c;是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与所测系统之间以及内部各系统之间的交…

JDY-23蓝牙模块与电脑的连接方式

JDY-23蓝牙模块支持多种连接方式&#xff0c;包括SPP&#xff08;串口通信&#xff09;模式和BLE&#xff08;低功耗蓝牙&#xff09;模式。以下是与电脑连接的具体方法&#xff1a; 1. 通过SPP模式连接 JDY-23模块支持SPP协议&#xff0c;可以通过串口与电脑通信。以下是连接…

【网络】Linux 内核优化实战 - net.core.rmem_max

目录 参数作用与原理默认值与查看方法调整场景与方法适用场景调整方法 与其他参数的协同性能影响与注意事项典型案例总结 net.core.rmem_max 是 Linux 内核中控制 套接字接收缓冲区&#xff08;Receive Buffer&#xff09;最大允许值 的参数。它与 net.core.rmem_default&#…

设计模式 | 工厂模式

工厂模式&#xff08;Factory Pattern&#xff09; 是创建型设计模式的核心成员&#xff0c;它通过将对象创建的逻辑封装起来&#xff0c;实现了创建与使用的解耦。本文将深入探讨工厂模式的核心思想、实现技巧以及在C中的高效实现方式。 为什么需要工厂模式&#xff1f; 在软…

数字孪生技术驱动UI前端变革:从静态展示到动态交互的飞跃

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;数字孪生技术正以破竹之势重构 UI 前端的技术逻辑与设计理念…

Django实战:自定义中间件实现全链路操作日志记录

文章目录 一、中间件介绍激活中间件生命周期 二、自定义中间件中间件钩子函数基于类的中间件 三、实战案例操作日志功能参考资料 一、中间件 介绍 在 Django 中&#xff0c;中间件&#xff08;Middleware&#xff09;是一组轻量级、底层的插件系统&#xff0c;用于全局地改变…

Java编程之迭代器模式(Iterator Pattern)

引言&#xff1a; 走进图书馆&#xff0c;你站在一排书架前&#xff0c;想要浏览书籍。你会一格格地从左到右翻阅书籍&#xff0c;而不是去研究书架是什么。 一本书一本书地翻&#xff0c;才知道书架上藏了什么书&#xff0c;研究书架的构造是不知道书籍的内容的。 这种“逐本…

ARM64 linux系统的一般执行过程

1、正在运行的用户进程X 2、发生异常&#xff08;包括系统调用等&#xff09;&#xff0c;CPU完成的工作&#xff1a;把当前程序指针寄存器PC放入ELR_EL1寄存器&#xff0c;把PSTATE放入SPSR_EL1寄存器&#xff0c;把异常产生的原因放在ESR_EL1寄存器&#xff0c;将异常向量表…

Vue3+ element 实现导入导出

一、导入功能相关代码分析 相关变量定义 importVisible&#xff1a;这是一个ref类型的响应式变量&#xff0c;用于控制导入对话框的显示与隐藏&#xff0c;初始值为false。当用户点击 “导入” 按钮时&#xff0c;会尝试将其值设为true来显示导入对话框&#xff0c;若出现异常则…

Git安装(纯小白版)

一、Git安装 1. 简介 Git是一款免费开源的分布式版本控制系统&#xff0c;常用于软件开发。它能记录文件在不同时间的改动&#xff0c;让用户在需要时查看、恢复旧版本。支持多人协作开发&#xff0c;多人可同时修改项目文件&#xff0c;Git会处理好冲突。开发者能在本地创建…

cocos2 本地根据文本内容生成二维码

cocos2 本地根据文本内容生成二维码 之前做了一个功能&#xff0c;就是cocos2小游戏&#xff0c;结算页面需要有一个二维码&#xff0c;二维码内容是一个网址&#xff0c;这个网址需要根据用户游玩分数确定访问哪个网址&#xff0c;但是这个小游戏是单机小游戏&#xff0c;不连…

87.xilinx FPGA读取器件id方法

dout数据高位先出msb module chip_id_reader(input clk,input reset,output [56:0] dna_value,output dna_valid );reg [6:0] bit_count;reg [56:0] dna_shift_reg;reg dna_read;reg dna_shift;wire dna_out;// 实例化DNA_PORT原语DNA_PORT #(.SIM_DNA_VALUE(57h123456789ABCD…

AcWing--数据结构(二)

Trie 树 用来高效的快速存储和查找字符串集合的数据结构 如存储&#xff1a;abcdef,abdef,aced,... 从根节点开始存储&#xff0c;从前往后存储&#xff0c;看是否有a&#xff0c;没有就创建&#xff0c;依次存储。 一般在最后一个字符打个标记&#xff0c;意思就是当前字符…