NumPy介绍

最近因为需要使用python做一个数据处理的项目,所以粗略的学习了一下numpy,在此分享一下自己学习中遇到的一些问题和一些基础的名词。

什么是NumPy?

python用于科学计算的基础包。提供多维数组对象,各类派生对象,用于数组快速操作的api。

NumPy包的核心是ndarray对象。封装了python原生的同数据类型的n维数组(为了保证运行速度,其中许多操作都是代码在本地进行编译后执行的)

与原生Python Array的区别

  1. NumPy数组在创建的时候就又固定的大小。更改ndarray的大小会创建一个新的数组并且删除原有数组。
  2. NumPy数组中的元素需要具有相同的数据类型,因此在内存中的大小相同。
  3. NumPy数组有利于对大量数据进行高级数学和其他类型的操作。(这些操作相比原生执行效率更高,代码更少)
  4. 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)。

例子:

最新文章

  1. Android源码——Broadcast Receiver
  2. .net读写config appsetting
  3. magento2 客户端模式less样式修改。
  4. Java操作Wrod文档的工具类
  5. 『信息收集』GoogleHacking快速定位目标网站
  6. js前台获取list的demo
  7. OpenCVR 有新成员 OpenCVV OpenCVC
  8. js文件中使用EL表达式的问题
  9. PHP curl请求https遇到的坑
  10. expansion pattern ‘Frame&amp;’ contains no argument packs
  11. 前端神器之jquery
  12. SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新
  13. Django:安装和启动
  14. Kafka Manager
  15. canvas图片上传相关学习
  16. rsync续传大目录一例
  17. 更优雅地关闭资源 - try-with-resource及其异常抑制
  18. DataGrid的列上添加日期控件
  19. mysql如何让自增id从某个位置开始设置方法
  20. Maven 设置阿里巴巴发布版本仓库

热门文章

  1. 从GitHub建站迁移到服务器(Java环境)
  2. XSS基础笔记 from 《Web安全攻防 渗透测试实战指南》
  3. Linux等待队列(Wait Queue)
  4. Java递归算法经典实例(兔子问题、阶乘、1到100累加)
  5. python数据结构树和二叉树简介
  6. Java (一)下载APACHE Commons IO
  7. Consul 学习笔记-服务注册
  8. go 爬取页面保存
  9. spring boot:redis+lua实现生产环境中可用的秒杀功能(spring boot 2.2.0)
  10. spring注解@Transactional 和乐观锁,悲观锁并发生成有序编号问题