Datawhale powerful-numpy《从小白到入门》学习笔记

news2025/1/24 6:33:11

Datawhale powerful-numpy《从小白到入门》学习笔记

持续更新中

文章目录

  • Datawhale powerful-numpy《从小白到入门》学习笔记
  • 摘自官方文档的一些话
    • What is NumPy?
    • Why is NumPy Fast?
    • Who Else Uses NumPy?
  • 一.创建和生成
    • 1.从python列表或元组创建
      • 从列表创建
      • 从元组创建
    • 2.使用arange生成
    • 3.使用linspace/logspace生成
    • 4.使用ones/zeros创建
    • 5.使用random生成
    • 6.从文件读取
  • 二.统计和属性
    • 1.尺寸相关
    • 2.最值分位
    • 3.平均求和标准差
  • 三.形状和转变
    • 1.改变形状
    • 2.反序
    • 3.转置
  • 四.分解和组合
    • 1.切片和索引
    • 2.拼接
    • 3.重复
    • 4.分拆
  • 五.筛选和过滤
    • 1.条件筛选
    • 2.提取
    • 3.抽样
    • 4.最值 Index
  • 六.矩阵和运算
    • 1.算术
    • 2.矩阵
  • 七.小结
  • 参考资料
  • 四.分解和组合
    • 1.切片和索引
    • 2.拼接
    • 3.重复
    • 4.分拆
  • 五.筛选和过滤
    • 1.条件筛选
    • 2.提取
    • 3.抽样
    • 4.最值 Index
  • 六.矩阵和运算
    • 1.算术
    • 2.矩阵
  • 七.小结
  • 参考资料

摘自官方文档的一些话

What is NumPy?

NumPy is the fundamental package for scientific computing in Python. It is a Python library that provides a multidimensional array object(多维数组对象), various derived(派生) objects (such as masked arrays[【掩码数组】 and matrices), and an assortment of routines for fast operations on arrays(用于数组快速操作的各种API), including mathematical, logical, shape manipulation, sorting, selecting, I/O, discrete Fourier transforms(离散傅里叶变换), basic linear algebra, basic statistical operations, random simulation and much more.

At the core of the NumPy package, is the ndarray object(NumPy包的核心是ndarray. This encapsulates n-dimensional arrays of homogeneous data types(它封装了python原生的同数据类型的n维数组), with many operations being performed in compiled code for performance(许多操作在编译代码中执行以提高性能). There are several important differences between NumPy arrays and the standard Python sequences:

  • NumPy arrays have a fixed size at creation(NumPy数组在创建时有固定大小), unlike Python lists (which can grow dynamically). Changing the size of an ndarray will create a new array and delete the original(更改ndarray的大小将创建一个新数组并删除原始数组).
  • The elements in a NumPy array are all required to be of the same data type, and thus will be the same size in memory.
    • The exception: one can have arrays of (Python, including NumPy) objects, thereby allowing for arrays of different sized elements.
  • NumPy arrays facilitate advanced mathematical and other types of operations on large numbers of data(有助于对大量数据进行高级数学运算和其他类型的运算). Typically, such operations are executed more efficiently(执行更高效) and with less code than is possible using Python’s built-in sequences.
  • A growing plethora of(越来越多的) scientific and mathematical Python-based packages(基于python的科学和数学软件包) are using NumPy arrays; though these typically support Python-sequence input, they convert such input to NumPy arrays prior to processing, and they often output NumPy arrays(尽管这些软件包通常支持python的内置序列作为输入,但它们会在处理之前把此类输入转换为NumPy数组,并且它们通常会输出NumPy数组). In other words, in order to efficiently use much (perhaps even most) of today’s scientific/mathematical Python-based software, just knowing how to use Python’s built-in sequence types is insufficient - one also needs to know how to use NumPy arrays.

The points about sequence size and speed are particularly important in scientific computing. As a simple example, consider the case of multiplying each element in a 1-D sequence with the corresponding element in another sequence of the same length. If the data are stored in two Python lists, a and b, we could iterate over each element(遍历每个元素):

c = []
for i in range(len(a)):
    c.append(a[i]*b[i])

This produces the correct answer, but if a and b each contain millions of numbers, we will pay the price for the inefficiencies of looping in Python(为python中循环的低效付出代价). We could accomplish the same task much more quickly in C by writing (for clarity we neglect variable declarations and initializations, memory allocation, etc.【为了清楚起见,我们忽略了变量声明和初始化、内存分配等】)

for (i = 0; i < rows; i++) {
  c[i] = a[i]*b[i];
}

This saves all the overhead involved in interpreting the Python code and manipulating Python objects, but at the expense of the benefits gained from coding in Python. Furthermore, the coding work required increases with the dimensionality of our data (所需的编码工作随着我们数据的维数而增加). In the case of a 2-D array, for example, the C code (abridged as before 【如前所述】) expands to

for (i = 0; i < rows; i++) {
  for (j = 0; j < columns; j++) {
    c[i][j] = a[i][j]*b[i][j];
  }
}

NumPy gives us the best of both worlds(两全其美的办法): element-by-element operations are the “default mode” when an ndarray is involved, but the element-by-element operation is speedily executed by pre-compiled C code(预编译的C代码可以快速执行逐个元素的操作). In NumPy

c = a * b

does what the earlier examples do, at near-C speeds, but with the code simplicity we expect from something based on Python(以接近C的速度执行前面示例所做的操作,同时具有我们期望的python代码的简洁性). Indeed(事实上), the NumPy idiom is even simpler! This last example illustrates two of NumPy’s features which are the basis of much of its power: vectorization and broadcasting.

Why is NumPy Fast?

Vectorization(矢量化) describes the absence of any explicit looping(代码中没有任何显式循环), indexing, etc., in the code - these things are taking place, of course, just “behind the scenes” in optimized, pre-compiled C code(这些事情只是在优化的、预编译的C代码中”在幕后“发生). Vectorized code has many advantages, among which are(其中包括):

  • vectorized code is more concise and easier to read(简洁易读)
  • fewer lines of code generally means fewer bugs
  • the code more closely resembles standard mathematical notation 标准数学符号 (making it easier, typically, to correctly code mathematical constructs【通常更容易对数学结构进行编码】)
  • vectorization results in more “Pythonic” code. Without vectorization, our code would be littered with inefficient and difficult to read for loops.(如果没有矢量化,我们的代码将充满低效且难读的for循环)

Broadcasting is the term used to describe the implicit element-by-element behavior of operations(广播是用于描述操作的隐式逐个元素行为的术语); generally speaking, in NumPy all operations, not just arithmetic operations, but logical, bit-wise(按位运算), functional(函数运算), etc., behave in this implicit element-by-element fashion(都以这种隐含的逐元素方式运行), i.e.(即), they broadcast. Moreover, in the example above, a and b could be multidimensional arrays of the same shape, or a scalar and an array, or even two arrays of with different shapes, provided that the smaller array is “expandable” to the shape of the larger in such a way that the resulting broadcast is unambiguous(前提是较小的数组可以”扩展“为较大的形状且符合广播的规则,有明确的结果). For detailed “rules” of broadcasting see Broadcasting.

Who Else Uses NumPy?

NumPy fully supports an object-oriented approach(面向对象方法), starting, once again, with ndarray. For example, ndarray is a class, possessing numerous methods and attributes(拥有许多方法和属性). Many of its methods are mirrored by functions in the outer-most NumPy namespace(Numpy最外层的命名空间), allowing the programmer to code in whichever paradigm they prefer(允许程序员以他们喜欢的任何范式进行编码). This flexibility has allowed the NumPy array dialect and NumPy ndarray class to become the de-facto(实际上) language of multi-dimensional data interchange used in Python.(成为Python中使用最多的多维数据交换的实际语言)

一.创建和生成

先导入

# 导入 library
import numpy as np
# 画图工具
import matplotlib.pyplot as plt
  • 在实际工作过程中,我们时不时需要验证或查看 array 相关的 API 或互操作。
  • 有时候在使用 sklearn,matplotlib,PyTorch,Tensorflow 等工具时也需要一些简单的数据进行实验。

下面学习的创建和生成array的多种方法中,最常用的一般是 linspace/logspace 和 random,前者常常用在画坐标轴上,后者则用于生成「模拟数据」。举例来说,当我们需要画一个函数的图像时,X 往往使用 linspace 生成,然后使用函数公式求得 Y,再 plot;当我们需要构造一些输入(比如 X)或中间输入(比如 Embedding、hidden state)时,random 很方便。

1.从python列表或元组创建

  • 重点掌握传入 list 创建一个 array 即可:np.array(list)

  • ⚠️ 需要注意的是:「数据类型」

    • array 是要保证每个元素类型相同的

从列表创建

  • 一维list

    >>> # 一个 list
    >>> np.array([1,2,3])
    array([1, 2, 3])
    
  • 二维list

    >>> # 二维(多维类似)
    >>> # 注意,有一个小数哦
    >>> np.array([[1, 2., 3], [4, 5, 6]])
    array([[1., 2., 3.],
           [4., 5., 6.]])
    
  • 指定数据类型

    
    >>> # 您也可以指定数据类型
    >>> np.array([1, 2, 3], dtype=np.float16)
    array([1., 2., 3.], dtype=float16)
    >>> # 如果指定了 dtype,输入的值都会被转为对应的类型,而且不会四舍五入
    >>> lst = [
    ...     [1, 2, 3],
    ...     [4, 5, 6.8]
    ... ]
    >>> np.array(lst, dtype=np.int32)
    array([[1, 2, 3],
           [4, 5, 6]])
    

从元组创建

  • 创建

    >>> # 一个 tuple
    >>> np.array((1.1, 2.2))
    array([1.1, 2.2])
    >>> # tuple,一般用 list 就好,不需要使用 tuple
    >>> np.array([(1.1, 2.2, 3.3), (4.4, 5.5, 6.6)])
    array([[1.1, 2.2, 3.3],
           [4.4, 5.5, 6.6]])
    >>> np.array(((1.1, 2.2, 3.3), (4.4, 5.5, 6.6)))
    array([[1.1, 2.2, 3.3],
           [4.4, 5.5, 6.6]])
    
  • 转换

    >>> np.asarray((1,2,3))
    array([1, 2, 3])
    >>> np.asarray(((1.1, 2.2, 3.3), (4.4, 5.5, 6.6)))
    array([[1.1, 2.2, 3.3],
           [4.4, 5.5, 6.6]])
    >>> np.asarray(([1.,2.,3.],(4.,5.,6.)))
    array([[1., 2., 3.],
           [4., 5., 6.]])
    

2.使用arange生成

  • range 是 Python 内置的整数序列生成器,arange 是 numpy 的,效果类似,会生成一维的向量。
  • 如下情况会需要用arange来创建array
    • 需要创建一个连续一维向量作为输入(比如编码位置时可以使用)
    • 需要观察筛选、抽样的结果时,有序的 array 一般更加容易观察
  • ⚠️ 需要注意的是:在 reshape 时,目标的 shape 需要的元素数量一定要和原始的元素数量相等。
>>> np.arange(12)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> np.arange(12).reshape(3,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> np.arange(12.0).reshape(2,6)
array([[ 0.,  1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10., 11.]])
>>> np.arange(100,124,2)
array([100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122])
>>> np.arange(100,124,2).reshape(3,2,2)
array([[[100, 102],
        [104, 106]],

       [[108, 110],
        [112, 114]],

       [[116, 118],
        [120, 122]]])
>>> np.arange(100.,124.,2).reshape(3,2,2)
array([[[100., 102.],
        [104., 106.]],

       [[108., 110.],
        [112., 114.]],

       [[116., 118.],
        [120., 122.]]])
>>> np.arange(100.,124.,2.).reshape(3,2,2)
array([[[100., 102.],
        [104., 106.]],

       [[108., 110.],
        [112., 114.]],

       [[116., 118.],
        [120., 122.]]])

image-20221213011932683

3.使用linspace/logspace生成

4.使用ones/zeros创建

5.使用random生成

6.从文件读取

二.统计和属性

1.尺寸相关

2.最值分位

3.平均求和标准差

三.形状和转变

1.改变形状

2.反序

3.转置

四.分解和组合

1.切片和索引

2.拼接

3.重复

4.分拆

五.筛选和过滤

1.条件筛选

2.提取

3.抽样

4.最值 Index

六.矩阵和运算

1.算术

2.矩阵

七.小结

参考资料

  • numpy官方文档:https://numpy.org/doc/stable/#

四.分解和组合

1.切片和索引

2.拼接

3.重复

4.分拆

五.筛选和过滤

1.条件筛选

2.提取

3.抽样

4.最值 Index

六.矩阵和运算

1.算术

2.矩阵

七.小结

参考资料

  • numpy官方文档:https://numpy.org/doc/stable/#
  • numpy中文:https://www.numpy.org.cn/

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

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

相关文章

基于ISO13209(OTX)实现引导诊断

在上篇文章《基于ISO13209&#xff08;OTX&#xff09;实现EOL下线序列》中&#xff0c;讲到了OTX的由来以及OTX在EOL中的实现案例&#xff0c;而本文将讲述OTX的另一个广阔应用场景——定义引导诊断序列。 一 何为引导诊断&#xff1f; 引导诊断&#xff0c;通常也称为“引导…

市面上有哪些自动生成报表的工具?

每到月末、季度、年底&#xff0c;就是企业里各营销、财务、运营、企管等各部门“摆数据、晒业绩”的时候&#xff0c;除了财务因为有规范的制度约束&#xff0c;在规则和工具上更有保障&#xff08;最常见的就是在财务软件/ERP 里面自动生成三大周报&#xff09;之外&#xff…

GoPass系列免杀基础(一)

Goby社区第 23 篇插件分享文章 全文共&#xff1a;7730 字 预计阅读时间&#xff1a;20 分钟 小板凳提示&#xff1a;过数字全家桶&#xff08;开启晶核&#xff09;、某绒、卡巴、WD、某管家、魔法保姆、机器人、橘子&#xff0c;全程新手简单版&#xff0c;欢迎师傅们来交流…

一个被迫毕业面试 30 家公司,终于上岸了的Java老前辈的经验分享!

今天分享一个朋友的经历&#xff0c;被“毕业”后的求职经历&#xff1a; 在老东家干了 6 年&#xff0c;发展一般&#xff0c;很想出去&#xff0c;但是一直没有合适的机会&#xff0c;只好一边准备面试一边学习。让我没有想到的是&#xff0c;突然收到了“毕业”通知&#x…

大数据Kudu(十):Flink操作Kudu

文章目录 Flink操作Kudu Flink操作Kudu Flink主要应用场景是流式数据处理上,有些公司针对流式数据使用Flink实时分析后将结果存入Kudu,例如快手公司。这里将实时计算的结果存入Kudu需要自定义Flink Kudu Sink。 场景:Flink实时读取Socket数据,将结果存入Kudu表t_flink_re…

详解OpenCV的椭圆绘制函数ellipse()

函数ellipse()用于在图像上绘制椭圆。 有两种原型&#xff0c;这里只列出常用的那种。 C原型如下&#xff1a; void cv::ellipse(InputOutputArray img,Point center,Size axes,double angle,double startAngle,double endAngle,const Scalar & color,int thickness 1,…

地统计插值学习心得(三)ArcGIS Pro与ArcMap软件中地统计分析的区别

前言 ArcMap中地统计分析由来已久,很多GIS专业的同学学习地统计内容都是在ArcMap软件中实现的,随着IT技术的发展,ArcGIS系列软件架构也发生了重大变化,传统的ArcMap软件已不太能够满足当前的应用需求,在此背景下,ESRI推出了64位的ArcGIS Pro桌面软件,来实现二三维一体化…

【关于时间序列的ML】项目 4 :使用机器学习预测迁移

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

【关于2022年卡塔尔世界杯】

2022卡塔尔世界杯最全面的看点和分析&#xff0c;相信一定有你感兴趣的一点&#xff0c;相信一定会有你感兴趣的&#xff0c;推荐点赞收藏~~ 2022年世界杯比以往任何时候都晚&#xff0c;因为卡塔尔太热了…… 然而&#xff0c;四年一度的世界杯终于……来了 今年的世界杯&am…

非零基础自学Golang 第14章 反射 14.1 反射定义

非零基础自学Golang 文章目录非零基础自学Golang第14章 反射14.1 反射定义14.1.1 反射的定义14.1.2 与其他语言的区别第14章 反射 我们常用的一个打印函数fmt.Println()可以打印任何类型的数据&#xff0c;但是它本身是怎么实现的呢&#xff1f; 解读源码可以看到&#xff0c…

人员定位系统如何实现对人、车、物的安全管控?

人员定位系统是采用物联网设计理念&#xff0c;通过结合定位基站、视频监控、人脸抓拍、巡更、门禁、道闸、梯控等系统&#xff0c;对管控区域工作人员、访客、巡检人员进行精细化、规范化、智能化理。 智慧安全的概念随着物联网技术的发展逐渐成为发展趋势&#xff0c;人员定位…

【Python机器学习】卷积神经网络Vgg19模型预测动物类别实战(附源码和数据集)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 典型神经网络 在深度学习的发展过程中&#xff0c;出现了很多经典的卷积神经网络&#xff0c;它们对深度学习的学术研究和工业生产斗起到了促进的作用&#xff0c;如VGG ResNet Inception DenseNet等等&#xff0c;很多实际…

偷偷告诉你!与其辞职,不如用Python做月入过万的副业兼职

我想辞职&#xff01; 这是不是当下的你&#xff1f;在这个疫情当下的时代&#xff0c;许多打工人都有过这么一个想法&#xff0c;或许是因为工作待遇、亦或许是其他原因&#xff0c;但是却仍然屹立在工位上&#xff0c;有的甚至天天喊辞职&#xff0c;月月拿满勤。这是为什么…

阿里大牛解析微服务架构:Docker,Spring全家桶,分布式,数据库

前言 微服务架构&#xff08;Microservice Architecture&#xff09;是一种架构概念&#xff0c;旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念&#xff0c;它的…

【愚公系列】2022年12月 使用Jenkins实现程序的自动化发布

文章目录前言一、使用Jenkins实现程序的自动化发布1.安装Jenkins二、安装Gitee插件前言 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进…

如何用 Prometheus 和 Grafana 实现集群的监控预警

在读写、查询等高并发场景中&#xff0c;了解资源的使用情况能快速定位性能的瓶颈所在。本教程提供对多&#xff08;或单&#xff09;服务器及 DolphinDB 高可用集群&#xff08;或单节点&#xff09;资源的监控、告警、预警方案。本教程使用开源软件 Prometheus, Grafana 及对…

Git实战(四)| Git分支管理实操,搞定在线合并和本地合并

类似于SVN这种集中式版本管理&#xff0c;三年前刚来上海工作时候&#xff0c;在华为驻场上班&#xff0c;华为用的就是SVN&#xff0c;印象最深的就是那个小乌龟的图标&#xff1b;后来到外面工作&#xff0c;渐渐发现用Git的非常多&#xff0c;慢慢学习了解发现Git这种分布式…

5年Crud的我,啃完这份Java王者级核心宝典,成功入职阿里(P7)

我有话要说&#xff0c;请仔细看完 我发现一个现象&#xff0c;很多开发5年的程序员仍然停留在crud的阶段&#xff0c;这是什么原因&#xff1f;最主要的原因就是基础很差&#xff0c;尤其对于JVM和并发编程这方面掌握的比较差&#xff0c;而JVM和并发编程就是非常非常重要的基…

40问 深度挖掘Kafka,你能答上几个?

Kafka最初是由Linkedin公司开发的&#xff0c;是一个分布式的、可扩展的、容错的、支持分区的&#xff08;Partition&#xff09;、多副本的&#xff08;replica&#xff09;、基于Zookeeper框架的发布-订阅消息系统&#xff0c;Kafka适合离线和在线消息消费。它是分布式应用系…

SQL基础——集合运算

集合运算前言思维导图表的加减法表的加法——UNION&#xff08;并集&#xff09;代码示例7.1 创建表Product2代码示例7.2 将数据插入到表Product2中&#xff08;MYSQL&#xff09;代码示例7.3 使用UNION对表进行加法运算包含重复行的集合运算——ALL选项代码示例7.5 保留重复行…