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

简介

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的维度上进行。

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

【DevSecOps】2024 年需要警惕的 10 大 Web 应用程序安全威胁

【DevSecOps】2024 年需要警惕的 10 大 Web 应用程序安全威胁 由于 2023 年出现了许多创新,我们之前所了解的许多内容都发生了巨大变化;随着其中一些重大变化,威胁格局也发生了转变,一些旧威胁减少了,一些新威胁增加了。 技术每天都在不断变化,当我们谈论技术和相关威胁…

Redis核心数据结构之SDS和链表(三)

SDS与C字符串的区别 二进制安全 C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含空字符,否则最先被程序读入的空字符将被误认为是字符串结尾,这些限制使得C字符串只能保存文本数据,而…

数据结构(七)——线性表的基本操作

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉 在csdn获奖荣誉: 🏆csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ …

Pytorch学习 day05(RandomCrop、Transforms工具使用总结)

RandomCrop 将PIL或Tensor格式的输入图片,随机裁剪指定尺寸的部分输入尺寸可以为序列或单个整形数字代码如下: from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("i…

CSS常见用法 以及JS基础语法

CSS简介 首先我们要明白css对网页的页面效果就类似于化妆的效果,使得页面更好看 我们需要明白的就是CSS怎么使用即可 首先CSS的基本语法是<style></style>标签来修改 基本语法规范是选择器n条选择规范 例如 <style>p{color : red;} </style> 这里就是将…

C#知识点-22(ADO.NET五个对象,SQL漏洞注入攻击)

ADO.NET 概念&#xff1a;ADO.NET就是一组类库&#xff0c;这组类库可以让我们通过程序的方式访问数据库&#xff0c;就像System.IO的类用类操作文件一样&#xff0c;System.Data这组类是用来操作数据库的&#xff08;不光是MSSql Server&#xff09;&#xff0c;它提供了统一…

Java精品项目--第5期基于SpringBoot的高速收费系统的设计分析与实现

项目使用技术栈 SpringBootMavenShiroMySQLMybatis-PlusJavaJDK1.8HTML 系统介绍 项目截图

java 中 string常用方法及相关的例子

我将为您详细讲解 Java 中 String 类的常用方法及其相关例子。String 类是 Java 中最常用的类之一&#xff0c;它代表字符串&#xff0c;提供了许多用于操作字符串的方法。 1. 字符串比较 - equals(Object obj): 比较字符串的内容是否相等。 - equalsIgnoreCase(String str): 比…

阿里云域名优惠口令2024年最新,com、cn和域名注册续费使用

2024年阿里云域名优惠口令&#xff0c;com域名续费优惠口令“com批量注册更享优惠”&#xff0c;cn域名续费优惠口令“cn注册多个价格更优”&#xff0c;cn域名注册优惠口令“互联网上的中国标识”&#xff0c;阿里云优惠口令是域名专属的优惠码&#xff0c;可用于域名注册、续…

堆以及堆的实现

文章目录 堆的概念堆的实现HeapPushHeapPop HeapTop HeapSize HeapEmpty堆的应用 堆的概念 堆是一颗完全二叉树每个结点的值都小于子结点的值&#xff0c;这颗二叉树为小根堆每个结点的值都大于子结点的值&#xff0c;这颗二叉树为大根堆堆的定义如下&#xff1a;n个元素的序列…

覆盖element-ui的el-menu样式记录:背景图片、菜单图标、菜单高亮与鼠标悬浮高亮、调整子菜单等样式

页面中修改el-menu 设置background-color"transparent"&#xff0c;menu菜单下的背景图片则能正常显示了 <el-menuclass"el-menu-demo"mode"horizontal"background-color"transparent"><el-menu-item index"1">…

Java开发进大厂面试必备技能,面试初级java工程师问题

前言 今天的分享主要是讲下这个 redis&#xff0c;什么是缓存雪崩、穿透和击穿。这三个技术问题是我们平时开发工作中和面试过程中&#xff0c;必须要会的知识点&#xff0c;因为目前的互联网系统没有几个不需要用到缓存的&#xff0c;只要用到缓存的话&#xff0c;就需要掌握…

Long-term Correlation Tracking LCT目标跟踪算法原理详解(个人学习笔记)

目录 1. 算法总览2. 算法详解2.1. 基础相关滤波跟踪2.2. 各模块详解2.2.1. 相关跟踪2.2.2. 在线检测器 3. 算法实现3.1. 算法步骤3.2. 实现细节 4. 相关讨论&总结 1. 算法总览 LCT的总体流程如上图所示&#xff0c;其思想为&#xff1a;将长时跟踪&#xff08;long-term tr…

C++进阶之路---继承(一)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、继承的概念及定义 1.继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0…

MM配置1-定义、复制、删除、检查工厂

配置步骤&#xff0c;如下图&#xff1a; 双击“复制&#xff0c;删除&#xff0c;检查工厂选项” 点击“复制”按钮&#xff0c;输入参考工厂&#xff0c;和要新建的工厂 复制完成后&#xff0c;返回到上一界面&#xff0c;双击“定义工厂”选项 选中新建的1070工厂&#xff0…

超简单Windows-kafka安装配置

参考大佬文章&#xff1a; Kafka&#xff08;Windows&#xff09;安装配置启动&#xff08;常见错误扫雷&#xff09;教程_kafka在windows上的安装、运行-CSDN博客Kafka&#xff08;Windows&#xff09;安装配置启动&#xff08;常见错误扫雷&#xff09;教程_kafka在windows上…

android开发的基础,大厂程序员35岁后的职业出路在哪

为什么越来越多的年轻人感觉工作没有动力、职业发展没有希望&#xff0c;迷茫和中年危机等现象普遍发生&#xff1f; 人常说&#xff0c;安居才能乐业。 前些年&#xff0c;房价虽然也不低&#xff0c;但刚工作的年轻人&#xff0c;努力奋斗&#xff0c;攒上几年钱&#xff0c…

爬虫学习笔记-requests爬取王者荣耀皮肤图片

1.导入所需的包 import requests from lxml import etree import os from time import sleep 2.定义请求头 headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36} 3.发送请求 # hero…

线程同步的方法1——互斥锁、信号量

目录 一、引入 二、利用多线程同步解决线程并发 三、线程同步的概念 四、互斥锁 4.1互斥锁接口 4.2全局变量正确性问题&#xff08;引例&#xff09; 4.3 互斥锁例2(共享资源(打印机)使用问题) 五、信号量 5.1 信号量接口 5.2 全局变量正确性问题 5.3 信号量例2 一、…