Numpy(二) 元素与数组的操作

news2024/11/25 5:14:27

Numpy(二) 元素与数组的操作

一、元素的索引访问

1.一维数组索引访问

①Numpy一维数组索引访问与python内置序列类型索引访问一样,都使用中括号+下标([index])
②正值索引/负值索引
正值索引:0  1  2  3  4  5
a数组:  【1,2,3,4,5,6】
复制索引:0  -5 -4 -3 -2 -1
*正值索引:第一个元素为a[0]其余依次排序,第n个元素为a[n-1] 负值索引:第一个元素依旧为a[0]其余元素从后往前依次减小1,最后一个元素为a[-1],第二个元素为a[-(n-1)]

2.一维数组索引访问的操作、

import numpy as np
a=np.array([1,2,3,4,5,6])
print('正值索引第五个元素:',a[4])
print('负值索引倒数第二个元素:',a[-2])

正值索引第五个元素: 5
负值索引倒数第二个元素: 5

2.二维数组的索引访问

A.两种语法规则
①表达式1:np.array[所在0轴索引] [所在1轴索引] 表达式2:np.array[所在0轴索引,所在1轴索引]
image-20231011203758572
*0轴为行,1轴为列
B.操作
①第一种表示方法查询6号元素
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print('正值索引为:',a[1][2])
'6号元素正值索引为[1][2]'
print('负值索引为:',a[-2][-1])
'6号元素负值索引为:[-2][-1]'

正值索引为: 6
负值索引为: 6
②第二种索引方法索引6号元素
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print('正值索引:',a[1,2])
print('负值索引:',a[-2,-1])

[[1 2 3]
 [4 5 6]
 [7 8 9]]
正值索引: 6
负值索引: 6

二、切片访问

1.一维数组的切片访问

①Numpy一维数组的切片访问与python内置序列切片操作方法一样。切片运算有两种形式:
1.[start:end]————start是开始索引的位置,end是结束索引前一个元素的位置(不包含end位置上的元素),由开始到结束直接切片下来。
2.[start:end:step]——start是开始索引的位置,end是结束索引前一个元素的位置(不包含end位置上的元素),step为步长,不尝试切片是获取元素的间隙。步长可以选择正整数也可以选择负整数。
②两种方式的切片访问
A.第一种方式选取第3位至第6位的元素
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9,10])
print('选取的第3号到第六号元素为:',a[3:6])

选取的第3号到第六号元素为: [4 5 6]————下角标为6号的元素为7,但是不包含end位置的元素故最后一位为a[end-1](6)
B.第二种方式选取2到8位的元素,步长为2
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9,10])
print('选取2到8位的元素,步长为2的元素为::',a[2:8:2])

选取2到8位的元素,步长为2的元素为:: [3 5 7]

2.二维数组的切片访问

①二维数组的切片访问主要是以轴进行切片访问,先0轴后1轴。
②语法规则:
np.array[所在0轴上的切片,所在1轴上的切片]
③实例
给出5*5的数组
    0  1  2  3  4
 0[ 1  2  3  4  5]
 1[ 6  7  8  9 10]
 2[11 12 13 14 15]
 3[16 17 18 19 20]
 4[21 22 23 24 25]
A.找出[7,8,9],[12,13,14],[17,18,19],[22,23,24]
tips:0轴上切片[1:5],1轴上切片[1:4]
import numpy as np
a=np.array([[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]])
print(a[1:5,1:4])

[[ 7  8  9]
 [12 13 14]
 [17 18 19]
 [22 23 24]]
B.找[13,14]
tips:0轴上固定值2,1轴上切片[2:4]
import numpy as np
a=np.array([[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]])
print(a[2,2:4])
print(a)
[13 14]

三、布尔索引

1.为了从数组中过滤我们想要的元素,可以使用布尔索引。

2.一维数组的布尔索引

①创建一个一维数组[1,2,3,4,5,6]
②创建一维布尔数组[True,True,Flase,True,Flase,True]
③对比,得出数据
import numpy as np
a=np.array([1,2,3,4,5,6])
b=np.array([True,True,False,True,False,True])
print(a[b])

3.二维数组的布尔索引

①创建一个二维数组
②创建二维布尔数组
③对比,得出数据
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[True,False,True],[False,False,False],[True,False,False]])
print(a[b])

[1 3 7]
*布尔数组必须与索引数组的形状相同!

四、数组的操作

1.连接数组

1.concatenate函数:沿指定轴连接多个数组
[1,2,3]                    [1,2,3]
[4,5,6]+[10,11,12]———————— [4,5,6]
[7,8,9]                    [7,8,9]
                           [10,11,12]
                           
                           

[1,2,3] [10         [1,2,3,10]
[4,5,6]+ 11———————— [4,5,6,11]
[7,8,9]  12]        [7,8,9,12]                                  
向下直接拼接
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[10,11,12]])
ab=np.concatenate((a,b))
print(ab)

[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
向右拼接(将原来一维数组转置后拼接)
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[10,11,12]]).T//转置
ab=np.concatenate((a,b),axis=1)
print(ab)

[[ 1  2  3 10]
 [ 4  5  6 11]
 [ 7  8  9 12]]

2.hstack函数

hstack函数沿水平堆叠多个数组,相当于concatenate函数在axis=1的情况
import numpy as np
a=np.array([[1,2],[3,4]])
print(a)
b=np.array([[5,6]]).T
c=np.concatenate([a,b],axis=1)
print(c)
d=np.hstack([a,b])
print(d)

[[1 2]
 [3 4]]
[[1 2 5]
 [3 4 6]]
[[1 2 5]
 [3 4 6]]

3.vstack函数

vstack函数言垂直堆叠多个数组,相当于concatenate函数在axis=0的情况。
import numpy as np
a=np.array([[1,2],[3,4]])
print(a)
b=np.array([[5,6]])
c=np.concatenate([a,b],axis=0)
print(c)
d=np.vstack([a,b])
print(d)

[[1 2]
 [3 4]]
[[1 2]
 [3 4]
 [5 6]]
[[1 2]
 [3 4]
 [5 6]]

2.splik——切割数组

①语法:np.splik(ary,indices_or_sections,axis)
属性标注
ary指定所属数组
indices_or_sections对应的数组或者整数,如果整数就用该数平均分割数组,如果数组就按照指定轴做切片处理
axis轴的分割方向
②基本操作
A.平均等分数组:
等分一维数组:
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9])
print(np.split(a,3))

[array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
按列等分二维数组

1.修改axis参数

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.split(a,3,axis=1)
print(b)

[array([[1],
       [4],
       [7]]), array([[2],
       [5],
       [8]]), array([[3],
       [6],
       [9]])]

2.使用hsplit()

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.hsplit(a,3)
print(b)

[array([[1],
       [4],
       [7]]), array([[2],
       [5],
       [8]]), array([[3],
       [6],
       [9]])]
按行等分二维数组

1.修改axis参数

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.split(a,3,axis=0)
print(b)

[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]

2.使用vsplit()

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.vsplit(a,3)
print(b)

[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
B.用一个数组分割整体数组
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9])
b=np.split(a,[4,6])
print(b)

[array([1, 2, 3, 4]), array([5, 6]), array([7, 8, 9])]

五、数组的算术运算

1.numpy数组可以使用python里面的加减乘除乘方进行数组内部元素的算术运算。

2.数组的加法运算

①实例
a=[1,2,3,4] b=[2,3,4,5] a+b=[3,5,7,9]

a=[1,2]        b=[2,3]           a+b=[3,5]
  [3,4]          [4,5]               [7,9]
②代码操作
一维数组的加法运算
import numpy as np
a=np.array([1,2,3,4,5])
b=np.array([2,4,6,8,10])
print(a+b)

[ 3  6  9 12 15]
二维数组的加法运算
import numpy as np
a=np.array([[1,2,3],[6,7,8]])
b=np.random.rand(2,3)
print('b的数组为:',b)
print(a+b)

b的数组为: [[0.39952873 0.62792605 0.63734903]
 [0.80093729 0.51350318 0.33915585]]
[[1.39952873 2.62792605 3.63734903]
[6.80093729 7.51350318 8.33915585]]
数组内每个元素加固定值
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a+10
print(b)

[[11 12 13]
 [14 15 16]
 [17 18 19]]

3.数组里面减法运算(同加法)

4.数组里面的乘法运算

①实例
a=[1,2,3]    b=[1,3,5]      a*b=[1,6,15] 
  [4,5,6]      [2,4,6]          [8,20,36]
  [7,8,9]      [3,4,5]          [21,32,45]

②代码操作
一维数组的乘法运算
import numpy as np
a=np.array([1,2,3,4])
b=np.array([2,3,4,5])
print(a*b)

[ 2  6 12 20]
每个元素同乘一个数
import numpy as np
a=np.array([1,2,3,4])
b=np.array([2,3,4,5])
print(a*3)
print(b*5)

[ 3  6  9 12]
[10 15 20 25]
二维数组乘法运算
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[1,2,3],[2,4,6],[3,6,9]])
print(a*b)

[[ 1  4  9]
 [ 8 20 36]
 [21 48 81]]

5.数组里面的除法运算(同乘法)

6.矩阵里面的幂运算

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a**2)

[[ 1  4  9]
 [16 25 36]
 [49 64 81]]

*这里面的加、减、乘、除、乘方运算都为在数组里面元素的计算,乘除法不是矩阵相乘。

六、数组的广播

1.数组广播的概念:不同形状的数组或者标量计算时发生广播。

2.标量广播:一个数组与一个标量进行运算,这个标量会构成一个数组与原来数组的形状相同。

eg;

a=[1,2,3,4]  a+10=[1,2,3,4]+[10,10,10,10]=[11,12,13,14]
a*10=[1,2,3,4]*[10,10,10,10]=[10,20,30,40]


eg:
a=[1,2]     a+10= [1,2]  +  [10,10]  = [11,12]
  [3,4]           [3,4]     [10,10]    [13,14]

3.数组广播

①数组广播:当数组在进行计算是,计算的两个数组维度不相等就会进行数组广播。
②数组广播的规则

在这里插入图片描述

A. 一维数组与高维数组运算,一维数组通过广播的形式将一维数组补齐后进行运算。这里只能是一维数组进行广播

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

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

相关文章

Android Studio Giraffe | 2022.3.1

Android Gradle 插件和 Android Studio 兼容性 Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件 (AGP) 添加了几项专用于构建 Android 应用的功能。下表列出了各个 Android Studio 版本所需的 AGP 版本。 如果您的项目不受某个特定版本的 Andr…

专业课138,总分390+,西工大,西北工业大学827信号与系统考研分享

数学一 考研数学其实严格意义上已经没有难度大小年之分了,说21年难的会说22年简单,说22年简单的做23年又会遭重,所以其实只是看出题人合不合你的口味罢了,建议同学不要因偶数年而畏惧,踏踏实实复习。资料方面跟谁就用…

实用的窗口管理软件:Display Maid for Mac

Display Maid 是一款用于 macOS 平台的窗口管理工具,它可以帮助用户更高效地管理和组织他们的应用程序窗口。Display Maid 提供了一系列功能和快捷键,使用户可以轻松地调整窗口的位置、大小和布局,以适应不同的工作环境和需求。 以下是 Disp…

基于Java的家庭食谱管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

ubuntu服务器启动报错UNEXPECTED INCONSISTENCY解决方法

遇到这种情况,按照出错提示来进行处理一般不会有问题,我这里尝试使用命令fsck修复出错的分区: 我使用的是:umount /dev/sdb3 然后提示卸载错误(所以这一步不是到是否有用) 修复: fsck -y /dev/sdb3 ,最后挂载分区上去:mount /dev/sdb3 /da…

基于ebpf的性能工具-bpftrace

在前面我已经分享了关于ebpf入门的文章:基于ubuntu22.04-深入浅出 eBPF。这篇文章介绍一个基于ebpf技术的强大工具–bpftrace。 在现代计算机系统中,了解系统的内部运行情况对于诊断问题、优化性能以及进行安全监控至关重要。bpftrace作为一款强大的跟踪…

BUUCTF学习(8): 随便注,SQL

1、介绍 2、解题 1;set sql_modePIPES_AS_CONCAT;select 1 结束

FL Studio 21.1.3750中文完整至尊版2023最新破解版免费下载

FL Studio 21.1.3750中文完整至尊版2023最新破解版免费下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室,因为它包含了一个主要的听觉工作场所。最新fl studio 21中文版 版有不同的功能,如它包含图形和音乐音序器,帮助您…

MT4选网页版还是桌面版?anzo capital昂首资本分析优劣

很多投资者在进行交易的时候,MT4和MT5是必不可少的,但很多投资者会有这样的一个困惑?选网页版还是桌面版呢?下面anzo capital昂首资本就和各位投资者一起了解每个版本的优劣,从而根据自己的实际情况作出选择。 众所周…

适配LVGL界面图片和文字显示很虚,色阶明显的解决方法(全志R128适用)

LVGL界面图片和文字显示很虚,色阶明显的具体问题情况如下图 初步分析为RGB参数问题,先调出Colorbar检查一下 disp -c 0 8 显示如下,无异常 disp -c 0 1 显示如下,有条纹 此时问题可能出现在两个方向 1、rgb接线不稳定有干扰 2、…

巧妙实现重复渐变边框

巧妙实现重复渐变边框 html 结构 <div class"card"><div class"container">在 install 事件中&#xff0c;我们打开了一个名为 my-site-cache-v1的缓存&#xff0c;并将页面资源添加到缓存中。在 fetch事件中&#xff0c;我们首先检查缓存中…

各类证件的版面信息收集

香港身份证的版面分析&#xff1a; 证件页面&#xff1a; 相关的版面信息&#xff1a; 该页面包含香港身份证的信息&#xff0c;可以用于版面分析&#xff1b; 信息来源&#xff1a;香港不同证件说明大汇总|回乡证|居民身份证|护照|永居_手机网易网 台湾通行证号码&#xf…

家居建材小程序商城开发

家居建材小程序商城开发&#xff0c;一站式打造理想之家&#xff0c; 支持各种社交分享和三级分销&#xff0c;B2C双向业务&#xff0c;系统稳定&#xff01; 家居建材商城系统需要具备哪些功能呢&#xff1f; 1. 商品展示&#xff1a;家居建材商城系统将家居建材产品按照分类…

高效解决方案:Java轻松批量查找与替换Excel文本

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在 Excel 中&#xff0c;我们经常会使用快捷键CtrlF和CtrlH对查找的内容进行替换…

MISRA C++:2023,您需要了解的下一个MISRA信息

MISRA C&#xff1a;2023是备受期待的MISRA C标准的下一个版本&#xff0c;预计将于今年晚些时候发布。这个新版本将整合AUTOSAR C 14指南&#xff0c;并支持最新版本的C。 MISRA的C和C编码指南不仅是汽车行业的最佳标准&#xff0c;也是使用嵌入式系统的任何行业的最佳标准。…

【JAVA】日志打印java.util.logging.*函数自定义格式,并且显示调用时行号

1、JAVA自带的这样&#xff1a; 代码如下&#xff1a; import java.util.logging.*; Logger logger Logger.getLogger(MyLogger.class.toString()); logger.info("123");显示效果&#xff1a; 这样的格式&#xff0c;看起来不太好看&#xff0c;比如&#xff1a;会…

5分钟快速申请一个EDU教育邮箱

申请EDU教育邮箱 EDU教育邮箱概述应用JetBrains免费教育许可证Github学生包微软教育版语雀公益计划Navicat 申请EDU教育邮箱站点准备选择考取学位补充教育经历个人信息确认信息设置账号密码完善账户信息登录账号邮件收发测试 EDU教育邮箱 概述 EDU邮箱指的是教育邮箱&#xf…

百度SEO优化技巧与布局(提升网站排名的5种有效方法)

网站SEO关键词介绍&#xff1a; SEO&#xff08;SearchEngineOptimization&#xff09;即搜索引擎优化&#xff0c;是通过一系列技术手段和策略&#xff0c;让网站在搜索引擎中获得更好的排名和流量。关键词是SEO优化的重要组成部分&#xff0c;通过关键词布局合理&#xff0c…

小程序开发平台源码系统+社区团购小程序功能 带完整的搭建教程

今天来给大家分享一下小程序开发平台的社区团购小程序的功能。社区团购是一种基于社区概念的电子商务模式&#xff0c;它通过集合社区居民的需求&#xff0c;以团购的形式向供应商采购商品&#xff0c;以获得更优惠的价格和更方便快捷的购物体验。我们一起来看看他的搭建教程。…

从零开始学习C++:C++前言

【本节目标】 什么是CC发展史C的重要性如何学习C关于本门课程 1. 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&a…