惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
博客园 - 三生石上(FineUI控件)
S
Securelist
U
Unit 42
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog
T
Tenable Blog
The Hacker News
The Hacker News
The Register - Security
The Register - Security
IT之家
IT之家
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
P
Privacy & Cybersecurity Law Blog
博客园_首页
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
Tor Project blog
C
CERT Recently Published Vulnerability Notes
Apple Machine Learning Research
Apple Machine Learning Research
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
A
Arctic Wolf
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
V2EX
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
V
Visual Studio Blog
月光博客
月光博客
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Heimdal Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

博客园 - 会长

本地部署DeepSeek并用Python调用 一个用来将数字转换为英文的MySql函数 Snowflake算法生成Id 用C语言实现ElGamal算法 如何用C#代码验证XML文件是否符合DTD规范 如何调试WebBrowser控件中的JS代码 解决Devexpress的RichEditControl控件保存为docx文件后在word里打开字体显示不正确的问题 《水浒传》中的物价 诗词记录 对开发流程优化的建议 如何在HP ProLiant-DL580 Gen9 上安装ESXi 闪存客户端 北京某软件园小公园 MySQL优化技巧 大叔学ML第五:逻辑回归 大叔学ML第四:线性回归正则化 大叔学ML第三:多项式回归 大叔学ML第二:线性回归 大叔学ML第一:梯度下降
NumPy基础
会长 · 2020-08-21 · via 博客园 - 会长

最近我又决定看数学了,啊,先看下numpy,我好用来画函数图像。

数组

同质数组ndarray是Numpy中最重要的数据类型,该数据类型由两部分组成:

  1. 数据
  2. 描述数据的元数据

生成一维数组

import numpy as np

if __name__ == "__main__":
    a0 = np.array(range(11))    # 生成[0 1 2 3 4 5 6 7 8 9 10]
    a1 = np.arange(11)          # 生成[0 1 2 3 4 5 6 7 8 9 10]
    a2 = np.arange(0, 11)       # 生成[0 1 2 3 4 5 6 7 8 9 10]
    a3 = np.arange(0, 11, 2)    # 生成[0 2 4 6 8 10]

生成多维数组

import numpy as np

if __name__ == "__main__":
    a = np.array([np.arange(2), np.arange(2)])
    print(a)
    print('--------------')
    print("shape:", a.shape) # shape是由外到内的维度数组成的元组
    print("dtype:", a.dtype) # 元数据

image.png-1.1kB

选取数组的元素

import numpy as np

if __name__ == "__main__":
    a = np.array([np.arange(2), np.arange(2,4), np.arange(4,6)])
    print(a)
    print('-----------------------')
    print('a[0][0]:', a[0][0])
    print('a[1][0]:', a[1][0])
    print('a[2][0]:', a[2][0])

image.png-1.4kB

数组切片

先看一维数组的切片:

import numpy as np

if __name__ == "__main__":
    
    a = np.arange(10)

    print(a)
    print('-----------')
    print(a[0:5])       # [0 1 2 3 4]
    print(a[:5])        # [0 1 2 3 4]
    print(a[:5:2])      # [0 2 4]
    print(a[-3: -1])    # [7 8]
    print(a[-3:])       # [7 8 9]
    print(a[:])         # [0 1 2 3 4 5 6 7 8 9]
    print(a[::-1])      # [9 8 7 6 5 4 3 2 1 0]

list上的切片是一样的。再看多维数组的切片:

import numpy as np

if __name__ == "__main__":
    
    a = np.arange(24).reshape(2,3,4) # 这样也可以方便地构建一个多维数组
    print(a)
    print('-------------')

    print('a[0]:')
    print(a[0])
    print('-----')

    print('a[0,0]:')
    print(a[0,0]) 
    print('-----')

    print('a[0,0,0]:')
    print(a[0,0,0]) 
    print('-----')

    print('a[:,:,0]:')
    print(a[:,:,0]) 
    print('-----')

    print('a[...,0]:') # 上面的省略写法
    print(a[...,0]) 
    print('-----')

    print('a[:,0:2,0]:')
    print(a[:,0:2,0]) 
    print('-----')

image.png-7.4kB
总得来说,每个维度的切片和一维切片是一样的,不同维度直接用逗号分割。

改变数组的维度

  • reshape 返回改变维度后的数组
  • resize 改变原数组的维度
  • ravel 返回原数组展平后的数组
  • flatten 返回原数组展平后的数组

这两个的使用场景区别我暂时没搞懂

组合数组

import numpy as np

if __name__ == "__main__":    
    a = np.arange(9).reshape(3,3)
    b = np.arange(9).reshape(3,3)

    c = np.hstack((a, b)) # 横向合并
    d = np.vstack((a, b)) # 纵向合并
    print(c)
    print(d)

image.png-2.1kB

分割数组

import numpy as np

if __name__ == "__main__":    
    a = np.arange(9).reshape(3,3)
    print(a)
    print('---------')
    a1 = np.split(a, 3, 0)  # 按第一个维度分割
    a2 = np.split(a, 3, 1)  # 按第二个维度分割
    print(a1)
    print(a2)

image.png-4.2kB

数据类型

常用的数据类型有

  • bool
  • int8
  • int16
  • int32(int)
  • int64
  • uint8
  • uint16
  • uint32
  • uint64
  • float16
  • float32
  • float64(float)

此外还有复数和随平台改变精度的整形,不常用,用时再查。

创建数组时可以指定数据类型:

import numpy as np

if __name__ == "__main__":
    
    a1 = np.array([1, 2, 3], dtype=np.int)
    a2 = np.array([1, 2, 3], dtype=np.int16)

    a3 = np.array([1, 2.5, 3.5], dtype=np.float)
    a4 = np.array([1, 2.5, 3.5], dtype=np.float16)

    print('int:', a1.dtype)
    print('int16:', a2.dtype)

    print('float:', a3.dtype)
    print('float16:', a4.dtype)

image.png-1kB

数据类型强制转换

每种数据类型都对应一个强制转换函数,函数名通数据类型名:

import numpy as np

if __name__ == "__main__":
    
    print(np.int(1))
    print(np.float(1))
    print(np.bool(1))