Python学习笔记之第四章NumPy基础:数组与向量化计算

NumPy,是Python数值计算中最为重要的基础包。大多数计算包都提供了基于NumPy的科学函数功能,将NumPy的数组对象作为数据交换的通用语
以下内容将会出现在NumPy中:

  • ndarray,一种高效多维数组,提供了基于数组的便捷算术操作以及灵活的广播功能
  • 对所有数据进行快速的矩阵计算,而无需编写循环程序
  • 对硬盘中数组数据进行读写的工具,并对内存映射文件进行操作
  • 线性代数,随机数生成以及傅里叶变换功能
  • 用于连接NumPy到C、C++等语言类库的C语言API
    在这里插入图片描述

一、NumPy ndarray:多维数组对象
1、生成ndarray

  • array函数会将任意序列型对象,生成一个新的包含传递数据的NumPy数组
    import numpy as np
data2 = [[1,2,4,5],[2,3,223,23]]
arr2 = np.array(data2)
print(arr2)
print(arr2.ndim)
print(arr2.shape

)
Output:[1 2 4 5 3 6]
[[ 1 2 4 5]
[ 2 3 223 23]]
2
(2, 4)

  • empty则可以创建一个没有初始化数值的数组,zeros可以一次性创造全0数组
import numpy as np
print(np.zeros(10))
print(np.empty((2,3)))

Output:[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[1.33509389e-306 6.23057349e-307 9.34608432e-307]
[1.69121231e-306 1.29061685e-306 1.50200295e-307]]

  • arrange是Python内建函数的range数组版
import numpy as np
print(np.arange(10))

Output:[0 1 2 3 4 5 6 7 8 9]
在这里插入图片描述
2、ndarray的数据类型

  • 可以用dtype来得知数组中的数组类型,用astype来转换数组的数据类型

3、NumPy数组算术

  • 算术计算
import numpy as np
arr = [[1,2,3],[4,5,6]]
arr_ = np.array(arr)
print(arr_+arr_)
print(arr_ * arr_)
print(1/arr_)
print(arr_ ** 0.5)

Output: [ 8 10 12]]
[[ 1 4 9]
[16 25 36]]
[[1. 0.5 0.33333333]
[0.25 0.2 0.16666667]]
[[1. 1.41421356 1.73205081]
[2. 2.23606798 2.44948974]]

  • 比较
import numpy as np
arr = [[1,2,3],[4,5,6]]
Arr = [[2,35,1],[1,36,46]]
arr1 = np.array(arr)
arr2 = np.array(Arr)
print(arr1>arr2)

Output:[[False False True]
[ True False False]]

4、基础索引与切片

  • 索引和切片
    在这里插入图片描述
import numpy as np
arr = np.arange(10)
print(arr[3])
print(arr[3:6])

Output:3
[3 4 5]

  • 当对某个切片传递了一个值,该切片都被赋了一个值,这并不是复制
import numpy as np
arr = np.arange(10)
arr[1:4]=8
print(arr)

Output:[0 8 8 8 4 5 6 7 8 9]

  • 当想要复制切片的话,必须显示的调用arr[5:8].copy)()
  • 切片索引

5、布尔索引

  • Python中的and和or对布尔数组没有用,要用&和|来表示

6、神器索引

  • 为了选出一个符合特定顺序的子集,可以包含指明所需顺序的列表和数组来完成
import numpy as np
arr = np.empty((4,4))
for i in range(4):
arr[i] = i
print(arr)
print()
print(arr[[3,2,0,1]])

Output:[[0. 0. 0. 0.]
[1. 1. 1. 1.]
[2. 2. 2. 2.]
[3. 3. 3. 3.]]

[[3. 3. 3. 3.]
[2. 2. 2. 2.]
[0. 0. 0. 0.]
[1. 1. 1. 1.]]

7、数组的转置和换轴

  • 转置
import numpy as np
arr = np.empty((4,4))
for i in range(4):
arr[i] = i
print(arr.T)

Output:[[0. 1. 2. 3.]
[0. 1. 2. 3.]
[0. 1. 2. 3.]
[0. 1. 2. 3.]]

  • 换轴:transpose()

二、通用函数:快速的逐元素数组函数

  • 一元通用函数
    在这里插入图片描述
  • 二元通用函数
    在这里插入图片描述

三、使用数组进行面向数组编程
1、将条件逻辑作为数组操作

  • where(条件,True时进行的操作,False进行的操作)
import numpy as np
arr = np.empty((4,4))
for i in range(4):
arr[i] = i
arr = np.where(arr > 2 ,8 ,6)
print(arr)

Output:[[6 6 6 6]
[6 6 6 6]
[6 6 6 6]
[8 8 8 8]]

2、数学和统计方法

  • 基本的数组统计的方法
    在这里插入图片描述
import numpy as np
arr = np.empty((4,4))
for i in range(4):
arr[i] = i
a = arr.sum()
b = arr.mean()
c = arr.cumprod()
d = arr.cumsum()
print(a)
print(b)
print(c)
print(d)

Output:24.0
1.5
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 1. 2. 3. 4. 6. 8. 10. 12. 15. 18. 21. 24.]

3、布尔值数组的方法

  • any检查数组中是否至少有一个true,all检查数组中是否都是True

4、排序

  • sort方法返回的是排好序的数组拷贝,而不是对原数组按照位置排序

5、唯一值与其他集合逻辑

  • np.unique返回的是数组中唯一值排序后形成的数组
import numpy as np
arr = [1,3,2,41,3,1,34,5,3,1]
A  = np.array(arr)
print(np.unique(A))

Output:[ 1 2 3 5 34 41]

  • 数组的集合操作
    在这里插入图片描述

四、使用数组进行文件输入和输出

  • np.save和np.load是高校存取硬盘数据的两大工具函数
  • 可以使用np.savez将数组作为参数传递给函数

五、线性代数

  • 常用的函数
    在这里插入图片描述

六、伪随机数生成

  • NumPy中的random可以高校的生成多种概率分布下的完整样本值数组
  • 之所以称为伪随机数,是因为他们具有确定性行为的算法根据随机数生成器中的随机数种子生成
  • 部分函数
    在这里插入图片描述
    七、随机漫步模型
  • 如果你希望模拟多个随机漫步过程(比如5000个),只需对上面的代码散一点点修改即可生成所有的随机漫歩过程.只荽给numpy.randoa的函敝传入一个二元元组就可以产生一个二维數组,然后我们就可以一次性计算5000个随机漫步过程(一行一个)的累计和了
import numpy as np
nwalks = 5000
nsteps = 1000
draws = np.random.randint(0,2,size=(nwalks,nsteps))
steps = np.where(draws > 0 , 1 , -1)
walks = steps.cumsum(1)
print(walks)

Output:[[ -1 0 1 … 6 5 4]
[ 1 2 1 … -18 -17 -18]
[ 1 0 1 … 66 67 66]

[ -1 0 -1 … -4 -3 -2]
[ 1 0 1 … -40 -39 -40]
[ -1 -2 -1 … -24 -23 -22]]

参考教材:《利用Python进行数据分析》Wes Mckinney著

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值