NumPy使用教程(一)目录树
NumPy使用教程(一)
来自http://www.tpleina.com/2019/05/2953351469.html
NumPy介绍
NumPy是Python数值运算最为重要的基础包,提供多维数组运算(数组计算框架),为Python其他科学运算库提供底层支持
NumPy库能够对全量数组进行复杂运算,而不需要写Python循环,本身使用C语言实现,NumPy数组对象在内存使用更少、计算性能更强,远高出pyhton内置类型和方法
文章中所有代码示例均在jupyter notebook执行
NumPy 与 Python性能比较
import numpy as np
# numpy 数组对象
arr = np.arange(1000000)
# python内置list类型
lis = list(range(1000000))
# 对arr、lis 每个元素执行+1操作,并执行10次
%time for x in range(10): arr = arr + 1
%time for x in range(10): lis = [x+1 for x in lis]
输出
NumPy: Wall time: 25.9 ms
Python: Wall time: 1.04 s
多维数组对象ndarray使用
NumPy核心对象ndarray,多维数组对象
NumPy数组计算框架核心概念ndarray,即多维数组对象,所有数组操作都离不开ndarray
ndarray是多维数组对象,一个多维数组数据集,且数组每个元素的数据类型必须相同
ndarray基本属性:
- size 数组长度
- shape 表示数组维度
- dtype 描述数组的数据类型
- ndim 表示数组维度
ndarry一大特点是以标量的方式对数组运算
import numpy as np
arr = np.random.randn(4,3)
print (arr)
print (arr * 10)
print (arr + arr)
输出
[[ 0.98485327 -0.89302292 -1.06824246]
[-0.20116335 -1.22786453 -1.79337553]
[ 0.34246443 -0.24140177 0.90403802]
[-1.23069907 -0.94928253 0.2704078 ]]
[[ 9.84853265 -8.93022919 -10.68242463]
[ -2.01163345 -12.27864526 -17.93375527]
[ 3.42464425 -2.41401771 9.04038015]
[-12.30699073 -9.49282531 2.70407802]]
[[ 1.96970653 -1.78604584 -2.13648493]
[-0.40232669 -2.45572905 -3.58675105]
[ 0.68492885 -0.48280354 1.80807603]
[-2.46139815 -1.89856506 0.5408156 ]]
创建ndarray对象
np.array
最简单方式,接收任何序列对象(Python列表、元组以及numpy数组等),生成一个新的ndarray对象
import numpy as np
# 根据python list生成
arr1 = np.array([1,2,3,4,5,6])
arr3 = np.array([list(range(5)), list(range(5))])
# 根据ndarray生成
arr2 = np.array(arr1)
print(arr2 is arr1)
np.zeros
生成全零数组,若创建高维数组,需要传入元组参数
import numpy as np
# 一维
np.zeros(5)
# 二维
np.zeros((3,4))
# 三维
np.zeros((3,2,2))
np.zeros_like
根据所给定的ndarray对象生成对应的全零数组
import numpy as np
arr = np.array([list(range(5)), list(range(5))])
print(arr)
print(np.zeros_like(arr))
输出
[[0 1 2 3 4]
[0 1 2 3 4]]
[[0 0 0 0 0]
[0 0 0 0 0]]
np.ones
生成全一数组,若创建高维数组,需要传入元组参数
import numpy as np
# 一维
np.ones(5)
# 二维
np.ones((3,4))
# 三维
np.ones((3,2,2))
np.ones_like
根据所给定的ndarray对象生成对应的全一数组
import numpy as np
arr = np.array([list(range(5)), list(range(5))])
print(arr)
print(np.ones_like(arr))
# 输出
[[0 1 2 3 4]
[0 1 2 3 4]]
[[1 1 1 1 1]
[1 1 1 1 1]]
np.empty
生成没有初始值的数组,若创建高维数组,需要传入元组参数np.empty_like
根据所给定的ndarray对象生成没有初始值的数组np.full
创建一个由常数填充的数组,第一个参数是数组,第二个参数是数组中填充的常数np.full_like
同上np.eye
、np.identity
生成NxN单位矩阵(左对角线是1,其他元素是0)np.arange
range的数组版,生成一维数组,与array方法类似,若输入ndarry对象,则生成新的ndarry对象,只是引用
数组数据类型
- 可以在创建数组的时候,指定数据类型
- 可改变已有数组的数据类型,通过
astype()
方法,生成新的数组
NumPy支持的数据类型如下:
类型 | 类型代码 | 描述 |
---|---|---|
int8,uint8 | i1,u1 | 有符号和无符号的8位整数 |
int16,uint16 | i2,u2 | 有符号和无符号的16位整数 |
int32,uint32 | i4,u4 | 有符号和无符号的32位整数 |
int64,uint64 | i8,u8 | 有符号和无符号的64位整数 |
float16 | f2 | 半精度浮点数 |
float32 | f4,f | 标准单精度浮点数,兼容C语言float |
float64 | f8,d | 标准双精度浮点数,兼容C语言double和Python float |
float128 | f16,g | 浮点数扩展 |
bool_ | ?</ |