numpy——基础知识(创建/类型/形状/运算)(python)

news2024/10/7 7:32:16

简介

NumPy 是一个 Python 包。它代表 Numeric Python。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将Numarray的功能集成到 Numeric 包中来创建NumPy包。 这个开源项目有很多贡献者。(这两段简介均是抄的,这种简介看看就行了,了解即可

基本操作

创建数组(矩阵)

# 导入库
import numpy as np
import random 

# 创建数组(矩阵)
a=np.array([1,2,3,4,5])
b=np.array(range(1,6))
c=np.arange(1,6)

print(a)
print(b)
print(c)

效果

在这里插入图片描述

说明

我们有两个方法创建数组

  • np.arrray():这种方法我们要事先把数组的所有元素及数组的形状都准备好,调用这个方法只是转化。
  • np.arange():这种方法简单一些,但是有很多的局限性,比如只能创建一维的数组,数组元素不能随性所欲的指定。

数组类型及Numpy数据类型

查看数组类型

我们可以用type(a)查看a的类型,都是numpy.ndarray

NumPy - Ndarray 对象

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
ndarray中的每个元素在内存中使用相同大小的块。ndarray中的每个元素是数据类型对象的对象(称为 dtype)。
ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。(额,这些也是抄的,图就懒得抄过来了,看看即可)

Numpy数据类型

可以用dtype查看数组的元素类型,例如a.type查看数组a的元素类型
在这里插入图片描述

数据类型大致和C差不多,就是多个complex复数类型。

数组形状

很多都是概念性质的,没什么好讲解的(要讲解的都写了注释),直接上代码,简单明了

查看数组形状
# 导入库
import numpy as np

# 查看数组的形状
a=np.array([[1,2,3],[4,5,6]])
print(a)
print(a.shape)

修改数组形状
# 导入库
import numpy as np

# 修改数组的形状
# pay attention:这里的修改并没有改变原数组,调用reshape只是返回了修改后的值,若要保留修改后的值只能拿一个新的数组去接收

print(a.reshape(1,6))
print("*"*30)
print(a)

reshape的使用
# 导入库
import numpy as np

# 创建时直接指定数组形状
a=np.arange(24).reshape(4,6)
print(a)

将数组展开
# 导入库
import numpy as np

# 将数组展开,也就是变化成一维数组
# 同样地,这里并没有修改原数组形状。像这样有返回值的方法一般都不会修改元原数组。
print(a.flatten())
print(a)

还有很多,这里就不一一讲解介绍了,我们只需要了解最基本的即可,其他的用到了去Google即可,不然会搞的自己刚开始学就很累很不知所措,不要过于完美主义。

数组运算

数组和数运算
# 数组和数的运算 
a=np.arange(12).reshape(2,6)
print(a)

print("-"*30)
print(a+1)

print("-"*30)
print(a*3)

# 这是numpy的广播机制,运算过程中,加减乘除的值被运算到每一个元素上
同形状的数组之间运算
# 同形状的数组之间的运算

a=np.arange(24).reshape(4,6)
b=np.arange(100,124).reshape(4,6)
print(a)
print("-"*40)
print(b)
print("-"*40)
print(a+b)
print("-"*40)
print(a*b)

# 同形状的数组,对应的位置的元素直接运算即可
不同形状数组之间运算
# 不同形状的数组相加减
# 二行六列和一行六列

a=np.arange(12).reshape(2,6)
b=np.arange(6)
print(a.shape)
print(b.shape)
print("-"*30)
print(a)
print("-"*30)
print(b)
print("-"*30)
print(a-b)
print("-"*30)
print(a*b)

# 不同形状的数组相加减
# 二行六列和二行一列

a=np.arange(1,13).reshape(2,6)
b=np.arange(1,3).reshape(2,1)
print(a.shape)
print(b.shape)
print("-"*30)
print(a)
print("-"*30)
print(b)
print("-"*30)
print(a-b)
print("-"*30)
print(a*b)

# 不同形状的数组相加减
# 3*3*2和3#2

a=np.arange(18).reshape(3,3,2)
b=np.arange(6).reshape(3,2)
print(a.shape)
print(b.shape)
print("-"*30)
print(a)
print("-"*30)
print(b)
print("-"*30)
print(a-b)
print("-"*30)
print(a*b)

# 不同形状的数组相加减
# 3*3*2和3#3
# 这两个形状的数组不能进行计算

a=np.arange(18).reshape(3,3,2)
b=np.arange(9).reshape(3,3)
print(a.shape)
print(b.shape)
print("-"*30)
print(a)
print("-"*30)
print(b)
print("-"*30)
print(a-b)
print("-"*30)
print(a*b)

# 这两个数组之间不能运算,这段代码执行会报错
总结

广播原则:如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度是1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

总结

初学者可以看看这篇文章,写的很详细。但是吧…,内容确实有点多,容易一开始就劝退,而且不太好让初学者接受,容易让人学的糊里糊涂的。
我的建议是:初学者可以就先了解最基本最常用的用法,不用把所有的都弄清楚明白。先大致把知识点过一遍,有个印象,以后实际用的时候自然会熟练的。

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

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

相关文章

《程序员的职业迷宫:选择你的职业赛道》

程序员如何选择职业赛道? 大家好,我是小明,一名在编程迷宫中探索的程序员。作为这个庞大迷宫的探险者,我深知选择适合自己的职业赛道有多么重要。今天,我将分享一些关于如何选择职业赛道的心得,希望能够帮…

贪心 Leetcode 968 监控二叉树

监控二叉树 Leetcode 968 学习记录自代码随想录 给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 要点:1.想到优先覆盖叶子节点&#xff0c…

【Windows 常用工具系列 14 -- windows 网络驱动映射】

文章目录 windows 网络驱动映射 windows 网络驱动映射 映射网络驱动器的意思是将局域网中的某个目录映射成本地驱动器号。 在windows上将服务器目录映射到本地盘: 进入到服务器执行下面命令既可以看到对应的 IP地址: 将对应的IP地址填入上图中。 映…

【three.js】22. Imported Models导入模型

22. Imported Models导入模型 介绍 Three.js 可以让你创建很多原始几何体,但是当涉及到更复杂的形状时,我们最好使用专用的 3D 软件建模。 在本课中,我们将使用已经制作好的模型,但我们将在以后的课程中学习如何完全在 3D 软件中…

人人都写过的6个bug

大家好&#xff0c;我是知微。 程序员写bug几乎是家常便饭&#xff0c;也是我们每个人成长过程中难以避免的一部分。 为了缓解这份“尴尬”&#xff0c;今天想和大家分享一些曾经都会遇到过的bug&#xff0c;让我们一起来看看这些“经典之作”。 1、数组越界 #include <…

如何给Vue项目配置好一个nginx.conf文件?

如何给Vue项目配置好一个nginx.conf文件&#xff1f; 一般前端项目中&#xff0c;会有一个docker/nginx/nginx.conf文件&#xff0c;用于配置DockerFile配置等。 那么&#xff0c;如何给项目写好一个nginx.conf文件&#xff0c;以DockerFile为例&#xff1a; # 使用 Node.js …

SpringBoot+Mybatis-plus+shardingsphere实现分库分表

SpringBootMybatis-plusshardingsphere实现分库分表 文章目录 SpringBootMybatis-plusshardingsphere实现分库分表介绍引入依赖yaml配置DDL准备数据库ds0数据库ds1 entitycotrollerserviceMapper启动类测试添加修改查询删除 总结 介绍 实现亿级数据量分库分表的项目是一个挑战…

第三百八十五回

文章目录 1.概念介绍2.使用方法3.示例代码 我们在上一章回中介绍了Snackbar Widget相关的内容,本章回中将介绍TimePickerDialog Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.概念介绍 我们在这里说的TimePickerDialog是一种弹出窗口&#xff0c;只不过窗口的内容…

Windows10 安装Neo4j流程

1、下载并安装ava运行环境 官网链接&#xff08;需要注册Oracle账号&#xff09;&#xff1a;https://www.oracle.com/java/technologies/downloads/ 根据自己Neo4j版本确认需要的JDK版本 百度网盘链接&#xff1a; 链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/…

Unity 整体界面淡入淡出效果

在Unity中&#xff0c;如果我们要实现控制多个组件同时淡出&#xff0c;同时淡入的效果&#xff0c;可以使用DOTween插件实现。 如图&#xff0c;一个页面中带有背景&#xff0c;一张图片&#xff0c;一个文本&#xff0c;一个滑动条。 要实现以上界面的整体淡入淡出&#xff…

企业内部培训考试系统在线考试都用到了哪些防作弊技术?

企业内部培训考试系统在线考试功能采用了多种技术手段来防止作弊行为&#xff0c;确保考试的公平性和有效性&#xff0c;具体如下&#xff1a; 1. 人脸识别验证&#xff1a;在考试开始前&#xff0c;考生需要进行人脸识别核验。系统会根据考生的姓名和身份证号实时采集人脸与公…

Python 弱引用全解析:深入探讨对象引用机制!

目录 前言 弱引用的概述 弱引用的原理 使用 WeakRef 类创建弱引用 使用 WeakValueDictionary 类创建弱引用字典 实际应用场景 1. 解决循环引用问题 2. 对象缓存 总结 前言 在Python编程中&#xff0c;弱引用&#xff08;Weak Reference&#xff09;是一种特殊的引用方式…

Android开发技巧,最详细的解释小白也能听懂

今天&#xff0c;跟大家聊聊&#xff0c;Framework开发的那些事。 系统应用开发&#xff0c;现在来说&#xff0c;已经开始脱离系统&#xff0c;单独拿出来开发&#xff0c;系统定制接口&#xff0c;已提供给应用调用&#xff0c;用来增强功能。 原生的桌面&#xff0c;拨号&…

【Java面试/24春招】技术面试题的准备

Spring MVC的原理 Mybatis的多级缓存机制 线程池的大小和工作原理 上述问题&#xff0c;我们称为静态的问题&#xff0c;具有标准的答案&#xff0c;而且这个答案不会变化&#xff01; 如果没有Spring&#xff0c;会怎么样&#xff1f;IOC这个思想是解决什么问题&#xff1f…

2024年腾讯云发红包了,可用于抵扣订单金额,你们领了吗?

在2024年腾讯云新春采购节优惠活动上&#xff0c;可以领取新年惊喜红包&#xff0c;打开活动链接 https://curl.qcloud.com/oRMoSucP 会自动弹出红包领取窗口&#xff0c;如下图&#xff1a; 腾讯云2024新春采购节红包领取 如上图所示&#xff0c;点击“领”红包&#xff0c;每…

Android学习笔记在互联网上火了,Android资深架构师分享学习经验及总结

本篇将由 环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来 等七个方面&#xff0c;对当前的 React Native 和 Flutter 进行全面的分析对比&#xff0c;希望能给你更有价值的参考。 前言 移动端跨平台在经历数年沉浮之后&#xff0c;如今还能在舞台聚光…

Android开发真等于废人,历经30天

前言 回顾一下自己这段时间的经历&#xff0c;三月份的时候&#xff0c;疫情原因公司通知了裁员&#xff0c;我匆匆忙忙地出去面了几家&#xff0c;但最终都没有拿到offer&#xff0c;我感觉今年的寒冬有点冷。到五月份&#xff0c;公司开始第二波裁员&#xff0c;我决定主动拿…

【《高性能 MySQL》摘录】第 9 章 操作系统和硬件优化

文章目录 9.1 什么限制了MySQL的性能9.2 如何为 MySQL 选择 CPU9.2.1 哪个更好&#xff1a;更快的 CPU 还是更多的 CPU9.2.2 CPU架构9.2.3 扩展到多个CPU和核心 9.3 平衡内存和磁盘资源9.3.1 随机 I/O 和顺序 I/O9.3.2 缓存&#xff0c;读和写9.3.3 工作集是什么9.3.4 找到有效…

QT 5.14.2版本 MAC环境安装部署流程

下载地址 &#xff1a;https://download.qt.io/archive/qt/5.14/5.14.2/ 下载完成后如下 双击打开安装&#xff0c;会弹出验证&#xff0c;等待验证完成 点击next 下一步&#xff0c;开始安装 如果你还没有qt账号&#xff0c;则先注册账号 &#xff0c;注册完后输入账号&#…

【报错】PyCharm安装插件时出现Error loading package list:Unexpected end of file from server

Q PyCharm安装插件时出现 Error loading package list:Unexpected end of file from server提示窗口。 A 将Python Interpreter——>——>Manage Repositories中无法用的源删掉 刷新