Numpy那些事

本文介绍了NumPy的基础知识,包括如何创建array,如从数据类型、numpy函数以及random模块创建。详细讲解了数组的变形、运算和统计操作,并通过案例展示了神经网络的实现、图片颜色计算和Game of Life。此外,还探讨了广播机制和数组操作,以及NumPy与其他库如torch的转换和文件操作。
摘要由CSDN通过智能技术生成

一、引言

  • Numpy(Numerical Python)是一个开源的Python科学计算库,它的出现让我们可以更加方便的使用数组、进行矩阵运算,还提供了大量的数学函数库供使用者直接调用。
  • 对于同样的数值运算任务,使用numpy要比直接写python代码具有更简洁的代码和更高效的性能,而且numpy是sklearn、tensorflow等各大数据科学框架的基础库,对于numpy的学习对于我们进一步理解这些库具有非常大的帮助。
  • numpy的学习,以读懂为首要目的,争取快速入坑(建议亲自动手敲一遍代码),所有相关的操作不用死记硬背,用时再查。
## numpy安装
# pip install Numpy
import numpy as np
np.__version__

二、创建array对象

2.1 从其它数据类型创建array

# 从Python的列表创建array
## 一维数组
arr1 = np.array([0,2,4,6,8])
## 二维数组
arr2 = np.array(
    [
        [0,2,4,6,8],
        [1,3,5,7,9]
    ]
)

2.1 从其它数据类型直接创建array

# 从其它库函数数据创建array
from PIL import Image  ## 也可以借助cv2

image_dog=Image.open('./images/dog.png')  
print(type(image_dog))
image_dog_np=np.array(image_dog) 
print(type(image_dog_np)) 
print(image_dog_np.shape)  ## 打印数组的维度
print(image_dog_np.dtype)  ## 打印ndarray对象的元素类型

打印结果:
在这里插入图片描述

2.2 借助numpy的预定函数如:arange、ones、empty等进行创建

# 使用np.arange创建数组
array_arange = np.arange(0,10,2)    ## 创建0-10步数为2的数组,用过Matlab的同学应该很熟悉

# 使用np.zeros创建全零数组
array_zeros = np.zeros((2,3))    ## 创建2行3列的全零数组

# 使用np.full创建指定值的数组
array_full = np.full((2,2),"polars")  ## 注意numpy的array同样能够容纳str类型的数据

打印结果:
在这里插入图片描述

# 使用np.empty创建一个指定形状和数据类型且未初始化的数组:
array_empty = np.empty([3,2], dtype = float) 
## 注:此方法得到的array数据都是未初始化的,这意味着里面的值是不确定的值,未明确赋值前尽量不要用

tips:

  • 除了以上所列函数意外,还有诸如linspace、logspace、ones_like等函数,根据自己所需灵活取用即可。
  • numpy中数组的所有元素类型必须是唯一的,它本质上是 dtype 对象的实例,并对应唯一的字符。

2.3 使用random模块生成随机数的数组

# 使用np.random.random创建数组
array_random = np.random.random((3,2))  ## 创建3行2列的数组,里面的值是0-1之间的随机数

案例1:随机漫步

一个简单的数组创建的例子:从0开始,已知步长1和-1出现的概率相等,通过各种方式实现1000步的随机漫步。

%%time
# (1)通过内置的random模块以纯Python的方式实现
import random 
position = 0
walk = [position]
steps = 1000
for i in range(steps):
    step = 1 if random.randint(0, 1) else -1
    position += step
    walk.append(position)
# 画出折线图
import matplotlib.pyplot as plt
plt.plot(walk[:100])

%%time是一个魔术命令,它是IPython的一部分,可以用来打印整个单元格的执行时间。
在这里插入图片描述

%%time
# (2)用np.random模块一次性随机产生
nsteps = 1000
draws = np.random.randint(0, 2, size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()
plt.plot(walk[:100])

在这里插入图片描述
对比一下不难发现,相同的问题,基于NumPy的数据处理速度要比纯Python快10到100倍(甚至更快),并且使用的内存更少。

三、Numpy基本运算

3.1 数组的变形

# 将数字 1~6 放入一个 2×3 的矩阵中
grid = np.arange(1, 7).reshape((2, 3))  

在这里插入图片描述

# 矩阵的转置
grid.T   

在这里插入图片描述

3.2 数组的运算

# 一维矩阵运算
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值