【1】Numpy基础

news2024/11/17 6:37:50

1 N维数组对象(ndarray)

先理解如何通过numpy进行批次计算:
引入numpy,随机生成数组:

import numpy as np

data=np.random.randn(2,3)
print(data)
print(data*10)
print(data+data)
[[ 0.88001557 -0.70682337  0.81193788]
 [ 1.46063048 -1.10190869 -1.28097833]]
[[  8.80015573  -7.0682337    8.11937877]
 [ 14.6063048  -11.01908691 -12.80978327]]
[[ 1.76003115 -1.41364674  1.62387575]
 [ 2.92126096 -2.20381738 -2.56195665]]

ndarray是⼀个通⽤的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有⼀个shape(⼀个表示各维度⼤⼩的元组)和⼀个dtype(⼀个⽤于说明数组数据类型的对象):

print(data.shape)
print(data.dtype)

(2, 3)
float64

1.1 创建ndarray

使用array函数,可以将一个列表转换为数组形式:

import numpy as np

data=[1,1,2,1,0,0]
a1=np.array(data)
print(data)
print(a1)
[1, 1, 2, 1, 0, 0]
[1 1 2 1 0 0]

嵌套序列会被转换成一个多维数组:

import numpy as np

data=[[1,1,1,1],[2,2,2,2]]
a1=np.array(data)
print(data)
print(a1)
[[1, 1, 1, 1], [2, 2, 2, 2]]
[[1 1 1 1]
 [2 2 2 2]]

zeros和ones分别可以创建指定⻓度或形状的全0或全1数组。empty可以
创建⼀个没有任何具体值的数组,返回的是一些未初始化的垃圾值。

import numpy as np

data1=np.zeros((3,6))
data2=np.ones((4,4))
data3=np.empty((2,6))
print(data1)
print(data2)
print(data3)
[[0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[[1.32306018e-311 2.47032823e-322 0.00000000e+000 0.00000000e+000
  8.01097888e-307 2.42336543e-057]
 [5.20269970e-090 1.65847383e-076 1.53471495e-052 5.53922725e+174
  3.99910963e+252 1.69105613e-306]]

一些数组创建函数:
在这里插入图片描述

1.2 numpy支持的数据类型

在这里插入图片描述
通过ndarray的astype方法可以转换数组的数据类型:

import numpy as np

data1=np.array([1,2,3,4,5])
print(data1.dtype)
data1_=data1.astype(np.float64)
print(data1_.dtype)
int32
float64

1.3 基本索引与切片

一维数组:

import numpy as np

data=np.arange(10)
print(data)
print(data[5])
print(data[5:8])

data[5:8]=12
print(data)
[0 1 2 3 4 5 6 7 8 9]
5
[5 6 7]
[ 0  1  2  3  4 12 12 12  8  9]

当创建一个切片以后,数据不会被复制,关于切片的任何修改都会直接反映到源数组上:

import numpy as np

data=np.arange(10)
print(data)

data_slice=data[5:9]
print(data_slice)
data_slice[1]=12345
print(data)
data_slice[:]=88
print(data)
[0 1 2 3 4 5 6 7 8 9]
[5 6 7 8]
[    0     1     2     3     4     5 12345     7     8     9]
[ 0  1  2  3  4 88 88 88 88  9]

如果你想要得到的是ndarray切⽚的⼀份副本⽽⾮视图,就需要明确地进⾏复制操作,例如arr[5:8].copy()。

二维数组:

import numpy as np

data2w=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(data2w)
print(data2w[1]) #索引第2个数组
print(data2w[0][2])#索引第1个数组的第3个值
print(data2w[0,2])#索引第1个数组的第3个值,上面的等价形式
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[4 5 6]
3
3

多维数组

import numpy as np

data3w=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])#2*2*3的三维数组
print(data3w)
print('--------------------')
x=data3w[0]#2*3的二维数组
print(x)
print('--------------------')
y=data3w[1,1]#第2个二维数组的第2个一维数组
print(y)
[[[ 1  2  3]
  [ 4  5  6]]

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

切片索引

一维:

import numpy as np

data=np.array([0,1,2,3,4,5,6,7,8,9])
print(data[1:6])
[1 2 3 4 5]

二维:

import numpy as np

data=np.array([[0,1,2],
              [3,4,5],
              [6,7,8]])#3*3的二维数组
print(data[:2])

[[0 1 2]
 [3 4 5]]

它是沿着第0轴(即第⼀个轴)切⽚的。也就是说,切⽚是沿着⼀个轴向选取元素的。表达式data[:2]可以被认为是“data的前两⾏”。
可以⼀次传⼊多个切⽚,就像传⼊多个索引那样:

import numpy as np

data=np.array([[0,1,2],
              [3,4,5],
              [6,7,8]])#3*3的二维数组
print(data[:2,1:])
[[1 2]
 [4 5]]

可以选取第⼆⾏的前两列,还可以选择第三列的前两⾏:

import numpy as np

data=np.array([[0,1,2],
              [3,4,5],
              [6,7,8]])#3*3的二维数组
print(data[1,:2])
print("--------------------------")
print(data[:2,2])
[3 4]
--------------------------
[2 5]

在这里插入图片描述

1.4 数组转置

转置

import numpy as np

data=np.arange(15).reshape((3,5))
print(data)
data=data.T
print(data)

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

在进⾏矩阵计算时,经常需要⽤到该操作,⽐如利⽤np.dot计算矩阵内积:

x=np.dot(data.T,data)
print(x)
[[ 30  80 130]
 [ 80 255 430]
 [130 430 730]]

2 通用函数

2.1 ⼀元(unary)ufunc

sqrt和exp:
在这里插入图片描述在这里插入图片描述

2.2 ⼆元(binary)ufunc

numpy.maximum计算了x和y中元素级别最⼤的元素
在这里插入图片描述在这里插入图片描述

3 利⽤数组进⾏数据处理

假设我们想要在⼀组值(⽹格型)上计算函数的平方和再开根号,
np.meshgrid函数接受两个⼀维数组,并产⽣两个⼆维矩阵(对应于两个数组中所有的(x,y)对):
在这里插入图片描述把这两个数组当做两个浮点数那样编写表达式即可:
在这里插入图片描述在这里插入图片描述

3.1 将条件逻辑表述为数组运算

numpy.where函数是三元表达式x if condition else y的⽮量化版本。
np.where的第⼆个和第三个参数不必是数组,它们都可以是标量值。在数据分析⼯作中,where通常⽤于根据另⼀个数组⽽产⽣⼀个新的数组。假设有⼀个由随机数据组成的矩阵,你希望将所有正值替换为2,将所有负值替换为-2。若利⽤np.where,则会⾮常简单:

import numpy as np

data=np.random.randn(4,4)
print(data)
data=data>0
print(data)
x=np.where(data>0,2,-2)
print(x)

[[ 0.96352433 -1.6204806   0.14904115  1.23612457]
 [ 0.00931106 -0.52504499 -0.64019292 -0.58209492]
 [ 1.01209682 -0.20559156  1.50025012  0.03056071]
 [ 0.95015428 -0.21081623 -2.74972977 -1.8681938 ]]
[[ True False  True  True]
 [ True False False False]
 [ True False  True  True]
 [ True False False False]]
[[ 2 -2  2  2]
 [ 2 -2 -2 -2]
 [ 2 -2  2  2]
 [ 2 -2 -2 -2]]

传递给where的数组⼤⼩可以不相等,甚⾄可以是标量值。

3.2数学和统计方法

在这里插入图片描述在这里插入图片描述

4 线性代数

NumPy提供了⼀个⽤于矩阵乘法的dot函数(既是⼀个数组⽅法也是numpy命名空间中的⼀个函数):
x.dot(y)等价于np.dot(x, y):

import numpy as np

x=np.array([[1,2,3],[4,5,6]])
y=np.array([[6,1],[7,4],[8,5]])
print(x)
print("----------------")
print(y)
m=x.dot(y)
print("----------------")
print(m)
n=np.dot(x,y)
print("----------------")
print(n)
[[1 2 3]
 [4 5 6]]
----------------
[[6 1]
 [7 4]
 [8 5]]
----------------
[[ 44  24]
 [107  54]]
----------------
[[ 44  24]
 [107  54]]

numpy.linalg中有⼀组标准的矩阵分解运算以及诸如求逆和⾏列式之类的东⻄:
在这里插入图片描述

5 伪随机数生成

在这里插入图片描述

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

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

相关文章

Linux网络编程——基于UDP协议的简易聊天室

0.关注博主有更多知识 操作系统入门知识合集 目录 1.UDP服务端 1.1消息转发的实现 2.UDP客户端 3.效果展示 1.UDP服务端 使用C、C混编的方式在Linux环境下实现一个简单的UDP服务端。那么我们先看代码,然后逐步分析: // udpServer.hpp #pragma o…

sql 性能优化基于explain调优(二)

文章目录 Explain问题描述解决方案 Explain 关于Explain具体怎么用以及有哪些优点,我就不过多的跟大家去讲解了,从我最初的文章: explain是什么?explain优缺点及如何使用explain优化SQL,大家可以点击这个链接看一下,对…

Midjourney基础教程

本教程收集于:AIGC从入门到精通教程 Midjourney基础教程 目录 新手快速入门知识汇总:

Facebook 广告效果越来越差,怎么办?

在如今的数字营销领域中,Facebook作为独立站卖家首选的推广引流平台,具备了许多优势。 一方面,Facebook拥有庞大的用户数量,是全球最大的社交媒体平台之一。另一方面,Facebook的广告算法可以将广告推送给更加精准的受…

创建.Net MAUI工程

下载Visual Studio或Visual Studio for Mac或Rider(收费) Visual Studio for Mac 2022Visual StudioRider 工具推荐 如果使用的是Windows电脑,建议使用Visual Studio 2022并安装ReSharper插件。如果使用的是Mac电脑,建议使用Ri…

【教程】用GraphSAGE和UnsupervisedSampler进行节点表示学习

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 无监督的GraphSAGE 加载 CORA 网络数据 按需采样的无监督GraphSAGE 无监督取样器(UnsupervisedSampler) 提取节点嵌入 节点嵌入的可视化 下游任务 数据拆分 分类器训练 无监…

8.1.0版本ELK搭建,不开启xpack认证机制

8.1.0版本ELK搭建,不开启xpack认证机制 部署环境安排下载安装包服务器环境配置部署elasticsearch部署kibana部署logstash部署httpd,filebeat配置kibana页面 部署环境安排 ip部署服务192.168.0.121kibana,elasticsearch192.168.0.83elasticsearch,logsta…

Spring boot 注解@Async不生效 无效 不起作用

今天在做公司项目时,有一个发邮件的需求。所以写了一个发送邮件的方法后来发现发邮件很慢,导致接口响应也很慢。于是我便想到要使用异步调用去处理这个方法。于是我把注解Async 加到了自己service类下的一个发邮件的一个方法,后来发现并没有生…

Push rejected,用Git修改已提交的注释

问题:有时候因注释与git规定的模板不匹配,会导致远程提交被拒绝 Push rejected 解决:修改不符合规范的注释再push即可 1、打开命令窗口 在项目根目录下右键点击出 Git批处理命令窗口。 2、查看已提交的commit 运行命令:git reba…

dataease源码阅读

源码:https://gitee.com/fit2cloud-feizhiyun/DataEase.git 文件夹目录 1.仪表盘主路由:frontend/src/views/panel |-- penel |-- index.vue |-- panel.js |-- appTemplate | |-- AppTemplateContent.vue | |-- index.vue | |-- component | |-- AppT…

华为OD机试真题 Java 实现【机器人活动区域】【2023Q1 200分】

一、题目描述 现有一个机器人,可放置于 M N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动 问题:求机器人可活动的最大范围对应的网格点数目。 说明&a…

ESP32-C2开发板Homekit例程

准备 1.1硬件ESP32 C2开发板,如图1-1所示 图1-1 ESP32 C2开发板 1.2软件 CozyLife APP可以在各大应用市场搜索下载,也可以扫描二维码下载如图1-2所示 HomeKit flash download tool 烧录工具 esp32c2 homkit演示固件 烧录教程 打开flash_download_to…

每日一题161——对角线遍历

给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 示例 1: 输入:mat [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,4,7,5,3,6,8,9] 示例 2: 输入:mat …

【大数据学习篇8】 热门品类Top10分析

在HBase命令行工具中执行“list”命令,查看HBase数据库中的所有数据表。学习目标/Target 掌握热门品类Top10分析实现思路 掌握如何创建Spark连接并读取数据集 掌握利用Spark获取业务数据 掌握利用Spark统计品类的行为类型 掌握利用Spark过滤品类的行为类型 掌握利用…

【嵌入式烧录刷写文件】-1.4-移动Motorola S-record(S19/SREC/mot/SX)中指定地址范围内的数据

案例背景(共5页精讲): 有如下一段S19文件,将源地址范围0x9100-0x9104中数据,移动至一个“空的,未填充的”目标地址范围0xA000-0xA004。 S0110000486578766965772056312E30352EA6 S123910058595A5B5C5D5E5…

调用返回风格

主程序子程序 面向过程 单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,即充当连接件的角色。调用关系具有层次性,其语义逻辑表现为主程序的正确性取…

nodejs微信小程序 vue+uniapp停车场车位管理系统sringboot+python

使用微信小程序进行应用开发,使用My SQL软件搭建数据库,管理后台数据并使用Java语言进行程序设计,借鉴国内现有的停车场管理系统,在他们的基础上进行增减和创新,使用Photoshop完成升降式停车场管理系统的界面部件设计&…

Python学习30:存款买房(C)

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 你刚刚大学毕业,…

龙蜥开发者说:构建软件包?不,是构建开源每一个角落!| 第 20 期

「龙蜥开发者说」第 20 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者任博…

JavaWeb-Ajax的学习

Ajax 今日目标: 能够使用 axios 发送 ajax 请求熟悉 json 格式,并能使用 Fastjson 完成 java 对象和 json 串的相互转换使用 axios json 完成综合案例 概述 AJAX (Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。 我们先来…