Numpy入门(简单)
2024-10-09 13:23:40
NumPy介绍
最近因为需要使用python做一个数据处理的项目,所以粗略的学习了一下numpy,在此分享一下自己学习中遇到的一些问题和一些基础的名词。
什么是NumPy?
python用于科学计算的基础包。提供多维数组对象,各类派生对象,用于数组快速操作的api。
NumPy包的核心是ndarray对象。封装了python原生的同数据类型的n维数组(为了保证运行速度,其中许多操作都是代码在本地进行编译后执行的)
与原生Python Array的区别
- NumPy数组在创建的时候就又固定的大小。更改ndarray的大小会创建一个新的数组并且删除原有数组。
- NumPy数组中的元素需要具有相同的数据类型,因此在内存中的大小相同。
- NumPy数组有利于对大量数据进行高级数学和其他类型的操作。(这些操作相比原生执行效率更高,代码更少)
- NumPy为计算速度(不牺牲使用python写代码的好处前提下)提出的的解决方案:当涉及到ndarray的时候,逐个元素的操作是"默认模式",但逐个元素的操作由预编译的c代码快速执行。NumPy的大部分功能的基础:矢量化和广播
为什么NumPy这么快?
- 矢量化代码更简洁,更易于阅读
- 更多的代码行通常意味着更少的错误
- 代码更接近标准的数学符号(通常,更容易正确编码数学结构)
- 矢量化导致产生更多"Pythonic"代码。如果没有矢量化,我们的代码就会被低效且难以阅读的for循环所困扰。
问题:向量化是什么?
答案:“向量化”(完全抽象出循环并仅描述对数组而不是元素的操作)是重写循环的过程,以便与其同时处理(例如)数组的4个元素N / 4次,而不是处理数组的单个元素N次。其本质其实很简单,就是同时进行多个计算,例子如下:
补充知识:许多CPU具有“向量”或“ SIMD”指令集,这些指令集将相同的操作同时应用于两个,四个或更多数据。(实现向量化的基础)
for (int i=0; i<16; ++i)
C[i] = A[i] + B[i];
//展开此循环会将其转换为如下形式:
for (int i=0; i<16; i+=4) {
C[i] = A[i] + B[i];
C[i+1] = A[i+1] + B[i+1];
C[i+2] = A[i+2] + B[i+2];
C[i+3] = A[i+3] + B[i+3];
}
//另一方面,将其向量化会产生如下结果:
for (int i=0; i<16; i+=4)
addFourThingsAtOnceAndStoreResult(&C[i], &A[i], &B[i]);
问题:广播是什么?
答案:当两个数组的形状并不相同的时候,我们可以通过扩展数组的方法来实现相加、相减、相乘等操作,这种机制叫做广播(broadcasting)。
例子:
最新文章
- Android源码——Broadcast Receiver
- .net读写config appsetting
- magento2 客户端模式less样式修改。
- Java操作Wrod文档的工具类
- 『信息收集』GoogleHacking快速定位目标网站
- js前台获取list的demo
- OpenCVR 有新成员 OpenCVV OpenCVC
- js文件中使用EL表达式的问题
- PHP curl请求https遇到的坑
- expansion pattern ‘Frame&;’ contains no argument packs
- 前端神器之jquery
- SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新
- Django:安装和启动
- Kafka Manager
- canvas图片上传相关学习
- rsync续传大目录一例
- 更优雅地关闭资源 - try-with-resource及其异常抑制
- DataGrid的列上添加日期控件
- mysql如何让自增id从某个位置开始设置方法
- Maven 设置阿里巴巴发布版本仓库
热门文章
- 从GitHub建站迁移到服务器(Java环境)
- XSS基础笔记 from 《Web安全攻防 渗透测试实战指南》
- Linux等待队列(Wait Queue)
- Java递归算法经典实例(兔子问题、阶乘、1到100累加)
- python数据结构树和二叉树简介
- Java (一)下载APACHE Commons IO
- Consul 学习笔记-服务注册
- go 爬取页面保存
- spring boot:redis+lua实现生产环境中可用的秒杀功能(spring boot 2.2.0)
- spring注解@Transactional 和乐观锁,悲观锁并发生成有序编号问题