NumPy 数据操作实用指南:从基础到高效(上)

简介: 本文介绍了使用 NumPy 进行数据操作的基本步骤,包括导入库、创建数组、基本操作等。通过实例演示了如何利用 NumPy 进行数组的创建、索引、切片、变形、级联和切割等操作,以及如何应用这些功能在图像处理中进行实际应用。


numpy get started

导入numpy库,并查看numpy版本

In [1]:

import numpy as np

In [3]:

np.__version__

Out[3]:

'1.24.3'

一、创建ndarray

1.使用np.array()由python list 创建

参数为列表:[1,4,2,5,3]

注意:

numpy默认ndarray的所有元素的类型是相同的 如果传进去的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int

In [4]:

l=[1,4,2,5,7]

l

Out[4]:

[1, 4, 2, 5, 7]

In [8]

type(l)

Out[8]:

list

In [10]:

nd=np.array(l)
nd

Out[10]:

array([1, 4, 2, 5, 7])

In [11]:

type(nd)

Out[11]:

numpy.ndarray

In [12]:

l2=[[1,3,5],[2,4,6]]

l2

Out[12]:

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

In [13]:

nd2=np.array(l2)

nd2

Out[13]:

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

方法更多,运行更快

In [15]:

nd.max()

Out[15]:

7

In [16]:

x=np.arange(1,10000,1)

x

Out[16]:

array([ 1, 2, 3, ..., 9997, 9998, 9999])

In [17]:

%timeit x.sum()

5.21 µs ± 201 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

In [18]:

def sum1(x):

res=0
for i in x:
res+=i
return res


In [19]:


%timeit sum1(x)
952 µs ± 30.3 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)

2.使用np的routines函数创建

包含以下常见创建方法: 1)np.ones(shape,dtype=None,order='C')

创建个指定形状的全为1的数组

In [2]:

np.ones(shape=(5,5),dtype=np.int8)

Out[2]:

array([[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]], dtype=int8)

2)np.zeros(shape,dtype=float,order='C')

在创建指定形状的全为0的数组

In [3]:

np.zeros(shape=(2,3,4),dtype=np.float16)

Out[3]:

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.]]], dtype=float16)

3)np.full(shape,fill_value,dtype=None,order='C')

再创建指定形状并填充特定值的数组

In [5]:

np.full(shape=(3,4),fill_value=3.14)

Out[5]:

array([[3.14, 3.14, 3.14, 3.14], [3.14, 3.14, 3.14, 3.14], [3.14, 3.14, 3.14, 3.14]])

4)np.eye(N,M=none,k=0,dtype=float) 对角线为1,其他位置为0

创建一个单位矩阵,对角线为1,其他位置为0

In [6]:

np.eye(N=5)

Out[6]:

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

5)np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

让它在指定范围内生成指定数量的等间隔数值

In [14]:

np.linspace(0,100,num=51)

Out[14]:

array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24., 26., 28., 30., 32., 34., 36., 38., 40., 42., 44., 46., 48., 50., 52., 54., 56., 58., 60., 62., 64., 66., 68., 70., 72., 74., 76., 78., 80., 82., 84., 86., 88., 90., 92., 94., 96., 98., 100.])

6)np.arange([start,]stop,[stop,]dtype=None)

让它在指定范围内以指定步长生成数组

In [15]:

np.arange(0,100,3)

Out[15]:

array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48,51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99])

7)np.random.randint(low,high=None,size=None,dtype='l')

生成指定范围内的随机整数数组

随机一下:

In [16]:

np.random.randint(0,100,(5,5))

Out[16]:

array([[29, 48, 25, 62, 47],[54, 95, 67, 16, 80],[ 5,  1, 97, 32, 40],[55, 44, 71, 21,  2],[ 7, 21, 89, 85, 93]])

8)np.random.randn(d0,d1,d2,...,dn) 标准正态分布

生成服从标准正态分布的随机数组

In [17]:

#平均值为0,方差为1

np.random.randn(4,5)

Out[17]:

array([[ 0.12986708,  0.38932889, -0.68477293, -0.48738848, -1.29017705],[-0.62040021,  1.77145003, -0.03924932, -0.3581067 , -0.63517962],[ 0.09991903, -1.3522429 , -0.58625064,  1.70491804, -3.71604832],[-0.3656734 ,  2.28166109,  0.43121117,  0.74830232,  0.30966411]])

9)np.random.normal(loc=0.0,scala=1.0,size=None) loc:位置 scala:标准差

In [27]:

nd=np.random.normal(175,10,size=1000).round(2)

#round(n):取小数位后n位
nd

. . .

In [28]:

nd.mean()

Out[28]:

174.88183999999998

In [29]:

nd.var()

#方差

Out[29]:

98.93779501440001

In [31]:

nd.std()

#标准差:方差开平方

Out[31]:

9.946747961741064

10)np.random.random(size=None) 生成0到1的随机数,左闭右开

In [32]:

np.random.random(100)

. . .

二、ndarray的属性

4个必记参数:ndim:维度 shape:形状(各维度的长度) size:总长度 dtype:元素类型

In [33]:

nd.ndim

Out[33]:

1

In [34]:

nd.shape

Out[34]:

(1000,)

In [35]:

nd.size

Out[35]:

1000

In [36]:

nd.dtype

Out[36]:

dtype('float64')

三、ndarray的基本操作

1.索引

一维与列表完全一致 多维时同理

In [38]:

nd2=np.random.randint(0,150,size=(4,5))

nd2

Out[38]:

array([[ 26,  85,  41,  21,  49],[ 27,   2,  51,  55,  34],[133,  78,  63,  52, 135],[ 26,  56,  77,  51,  13]])

In [39]:

nd2[1,1]

Out[39]:

2

In [40]:

nd2[2]

Out[40]:

array([133,  78,  63,  52, 135])

根据索引修改数据

2.切片

一维与列表完全一致 多维时同理

In [41]:

nd2

Out[41]:

array([[ 26,  85,  41,  21,  49],[ 27,   2,  51,  55,  34],[133,  78,  63,  52, 135],[ 26,  56,  77,  51,  13]])

In [43]:

nd2[0:3]

Out[43]:

array([[ 26,  85,  41,  21,  49],[ 27,   2,  51,  55,  34],[133,  78,  63,  52, 135]])

In [45]:

nd2[-2:]

Out[45]:

array([[133,  78,  63,  52, 135],[ 26,  56,  77,  51,  13]])

In [46]:

nd2[0:3,0:3]

Out[46]:

array([[ 26,  85,  41],[ 27,   2,  51],[133,  78,  63]])

将数据反转,例如[1,2,3]---->[3,2,1]

In [50]:

nd3=nd[:10]

nd3

Out[50]:

array([167.79, 195.33, 178.68, 171.35, 170.08, 154.38, 180.5 , 173.5 ,168.88, 154.37])

In [51]:

nd3[::-1]

Out[51]:

array([154.37, 168.88, 173.5 , 180.5 , 154.38, 170.08, 171.35, 178.68,195.33, 167.79])

两个::进行切片

In [52]:

nd3[::2]

#隔一行算一行

Out[52]:

array([167.79, 178.68, 170.08, 180.5 , 168.88])

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

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

相关文章

C++之单例模式

C之单例模式 前言介绍1、单例模式是什么?1.1 实现单例模式的三个要点1.2 单例模式分类 2. 懒汉式2.1 懒汉实现:基础方法2.2 懒汉实现:基于单锁2.3 懒汉实现:基于双重检测锁2.4 懒汉实现:基于双重检测锁和资源管理2.4.1…

Javascript——vue下载blob文档流

<el-table-column label"操作" fixed"right" width"150" showOverflowTooltip><template slot-scope"scope"><el-button type"text" v-has"stbsd-gjcx-down" class"edit-button" click&…

Mac 远程到 windows/Linux 开发体验为什么这么差?

随着科技的发展&#xff0c;远程开发已经成为一种常见的开发方式&#xff0c;其中Mac远程到windows/Linux开发也得到了广泛的应用。然而&#xff0c;许多用户反映Mac远程到windows/Linux开发体验并不理想&#xff0c;存在诸多问题。本文将深入探讨这些问题&#xff0c;并分析其…

MySQL 从零开始:02 MySQL 安装

文章目录 1、下载 MySQL 安装程序2、安装 MySQL 要操作 MySQL &#xff0c;首先要安装 MySQL &#xff0c;本文将一步步展示如何安装 MySQL&#xff0c;简直详细到令人发指。 环境&#xff1a; 操作系统&#xff1a;Windows10 64位MySQL版本&#xff1a;社区版 8.0.11.0 1、下…

探索AI技术的奥秘:揭秘人工智能的核心原理

人工智能&#xff08;AI&#xff09;已经成为当今科技领域最引人注目的话题之一。然而&#xff0c;对于许多人来说&#xff0c;AI仍然是一个神秘的领域&#xff0c;不清楚其核心原理。本文将探索AI技术的奥秘&#xff0c;为读者揭开人工智能的核心原理。 随着技术的飞速发展&am…

Asynchronous FIFO and synchronous FIFO-翻译自外网

Synchronous FIFO 先进先出 (FIFO) 是一种非常流行且有用的设计块&#xff0c;用于模块之间的同步和握手机制。 FIFO 的深度&#xff1a; FIFO 中的槽数或行数称为 FIFO 的深度。 FIFO 的宽度&#xff1a;每个槽或行中可以存储的位数称为 FIFO 的宽度。 在同步 FIFO 中&…

6.2 声音编辑工具GoldWave5简介(1)

不管你的MP3歌曲的简单剪接或者音频格式的转换,还是更加高级的后期加工 GoldWave5都可以令你轻松胜,甚至你自己录一首卡拉OK,也可以经过GoldWave5的修饰成为像歌星一样水晶般的动人声音!除了附有许多的效果处理功能外&#xff0c;它还能将编辑好的文件存成WAV、AU、SND、RAW、A…

vue 公众号开发,调用jssdk封装

vue 公众号开发&#xff0c;经常会使用到 转发朋友&#xff0c;朋友圈&#xff0c;调用扫一扫等功能&#xff0c;这时就要使用微信的 jssdk 微信jssdk传送门 1. 安装jssdk 插件 (jweixin-module) npm install jweixin-module --save 2. 封装方法 utils/jwx.js let jweixin…

sqlilabs第四十九五十关

Less-49(GET - Error based - String Bind - ORDER BY CLAUSE) 手工注入 无回显(还是单引号闭合)&#xff0c;只能使用延时注入 自动脚本 和上一关一样 Less-50(GET - Error based - ORDER BY CLAUSE -numeric- Stacked injection) 手工注入 这里需要使用堆叠注入的思路 自…

Qt优秀开源项目之二十:RedPanda-CPP(小熊猫C++)

小熊猫C是跨平台、轻量易用的开源C/C集成开发环境。 官网&#xff1a;http://royqh.net/redpandacpp github&#xff1a;https://github.com/royqh1979/RedPanda-CPP 小熊猫C&#xff08;原名小熊猫Dev-C 7)是基于Qt开发的Dev-C替代版本。和经典的Dev-C 5.11、新的Embarcadero …

TDengine 签约积成电子

随着电力系统的复杂性和数据量不断增加&#xff0c;电力负荷、电压、频率等庞大的时序数据需要更高效的存储和处理能力&#xff0c;才能确保数据的可靠性和实时性。此外&#xff0c;电力系统还需要对实时数据进行快速分析和决策&#xff0c;以确保电网的稳定运行。然而&#xf…

openssl3.2 - 官方dmeo学习 - sconnect.c

文章目录 openssl3.2 - 官方dmeo学习 - sconnect.c概述笔记END openssl3.2 - 官方dmeo学习 - sconnect.c 概述 TLS客户端 - 使用根证书, 非阻塞, 向服务器要东西. 笔记 开始一个新demo学习时, 要从头配置包含路径, 麻烦. 直接拷贝上一个实现工程, 换掉实现.c方便一些. 换的…

(超详细)4-YOLOV5改进-添加ShuffleAttention注意力机制

1、在yolov5/models下面新建一个SE.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def __…

C //练习 4-12 运用printd函数的设计思想编写一个递归版本的itoa函数,即通过递归调用把整数转换为字符串。

C程序设计语言 &#xff08;第二版&#xff09; 练习 4-12 练习 4-12 运用printd函数的设计思想编写一个递归版本的itoa函数&#xff0c;即通过递归调用把整数转换为字符串。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境下&#xff0c;有部分可能需要…

【IOS】惯性导航详解(包含角度、加速度、修正方式的api分析)

参考文献 iPhone的惯性导航&#xff0c;基于步态。https://www.docin.com/p-811792664.html Inertial Odometry on Handheld Smartphones: https://arxiv.org/pdf/1703.00154.pdf 惯性导航项目相关代码&#xff1a;https://github.com/topics/inertial-navigation-systems use…

openssl3.2 - 官方dmeo学习 - 索引贴

文章目录 openssl3.2 - 官方dmeo学习 - 索引贴概述笔记工程的搭建和调试环境BIOBIO - client-arg.cBIO - client-conf.cBIO - saccept.cBIO - sconnect.cBIO - server-arg.cBIO - server-cmod.cBIO - server-conf.cBIO - 总结certsEND openssl3.2 - 官方dmeo学习 - 索引贴 概述…

长尾分布定义,举个物种长尾分布和词频长尾分布的例子。

问题描述&#xff1a;长尾分布定义&#xff0c;举个物种长尾分布和词频长尾分布的例子。 问题解答&#xff1a; 长尾分布是一种概率分布的类型&#xff0c;它描述的是一种极端事件或者稀有事件的发生概率。具体来说&#xff0c;长尾分布描述的是少量的类别占据了大部分的样本…

SpringIOC之support模块GenericXmlApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

STM32(HAL库) CubeMX+Keil5 建立工程

STM32&#xff08;HAL库&#xff09; CubeMXKeil5 建立工程 目标选择 菜单栏 File 新建工程打开工程退出软件 Window 输出窗口的开启软件字体设置 Help 软件帮助文档检查软件更新管理MCU 已存在工程&#xff08;Existing Projects&#xff09; 最近打开过的工程(Recent Open…

2024年值得关注的10种自动化测试趋势

超级自动化测试这是利用人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;来自动化测试任务。超级自动化测试可以帮助减少手动测试的需求&#xff0c;提高测试的效率&#xff0c;并在开发生命周期的早期发现缺陷。 TestOps集成TestOps是将DevOps实践扩…