Numpy学习笔记

一.Numpy的作用

机器学习模型:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。
图像处理和计算机图形学:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
数学任务:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。

二.安装环境

Numpy是Python中科学计算的核心库。它提供了一个高性能的多维数组对象。
1.1 numpy pip集成
pip install numpy 直接使用python安装模块的基本方式。
Anaconda 自带numpy 库。
import numpy as np 导包

三、numpy 方法

3.1 numpy创建ndarray数组方法
从其他Python结构(例如,列表,元组)转换
numpy原生数组的创建(例如,arange、ones、zeros等)
从磁盘读取数组,无论是标准格式还是自定义格式
通过使用字符串或缓冲区从原始字节创建数组
使用特殊库函数(例如,random)
3.1.1 使用函数/方法创建ndarray数组
my_array = np.array([1, 2, 3, 4, 5]) # 创建 np array数组
a = np.zeros((2,2)) # Create an array of all zeros
b = np.ones((1,2)) # Create an array of all ones
c = np.full((2,2), 7) # Create a constant array 创造相同值类型的数组
d = np.eye(2) # Create a 2x2 identity matrix 单元矩阵
e = np.random.random((2,2)) # Create an array filled with random values 随机数
重点:随机数单元矩阵创建。以及seed随机种子
3.1.2 使用genfromtxt导入数据
genfromtxt使用双重循环来读取数据,第一个循环以字符串序列转换文件的每一行。第二个循环将每个字符串转换为适当的数据类型。这种机制比单一循环慢,但提供了更多的灵活性。特别的, genfromtxt考虑到缺失值的情况, 其他更简单的方法如loadtxt无法做到这点。
该功能可识别gzip和bz2(bzip2)档案。
1.genfromtxt参数
genfromtxt可以将行拆分为列,类似于hive中的分隔符,单个字符标记列之间的分隔。例如,逗号分隔文件(CSV)使用逗号(,)或分号(;)作为分隔符。
delimiter关键字用于定义拆分应该如何进行。
np.genfromtxt(BytesIO(data), delimiter=",")
2.autostrip参数
默认情况下,当一行被分解为一系列字符串时,单个条目不会被剥离前导空白或尾随空白。通过将可选参数autostrip设置为值True,可以覆盖此行为:
该参数等同于trim,去除首尾空格。
3.comments参数
可选参数comments用于定义标记注释开始的字符串。默认情况下,genfromtxt假定comments=’#’。评论标记可能发生在线上的任何地方。评论标记之后的任何字符都会被忽略。想当于从什么时候开始注释。
4.skip_header和skip_footer参数
np.genfromtxt(BytesIO(data),… skip_header=3, skip_footer=5)
5.usecols参数
在某些情况下,我们对数据的所有列不感兴趣,但只有其中的一小部分。我们可以用usecols参数选择要导入的列。该参数接受与要导入的列的索引相对应的单个整数或整数序列。请记住,按照惯例,第一列的索引为0。负整数的行为与常规Python负向索引相同。
#想当于spark中的sql语句。
6.names参数 设置各个分割后的字段的名字/类似于表头,以及各个字段的数据类型
data = BytesIO(“1 2 3\n 4 5 6”)
ndtype=[(‘a’,int), (‘b’, float), (‘c’, int)]
names = [“A”, “B”, “C”]
np.genfromtxt(data, names=names, dtype=ndtype)
类似于spark-sql中指定struct表结构方式.
7.converters参数 转换函数,比如日期格式

8.使用缺失值和填充值
missing_values参数用于识别丢失的数据,第二个参数filling_values用于处理这些缺失的数据
missing_values接收的参数。
一个字符串或逗号分隔的字符串
该字符串将用作所有列缺失数据的标记
一串字符串
在这种情况下,每个项目都按顺序与列关联。
一本字典
字典的值是字符串或字符串序列。相应的键可以是列索引(整数)或列名称(字符串)。另外,可以使用特殊键None来定义适用于所有列的默认值。

3.2 nparray数组索引

3.2.1切片(Slicing)
与Python列表类似,可以对numpy数组进行切片。由于数组可能是多维的,因此必须为数组的每个维指定一个切片。
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
b = a[:2, 1:3] #切片数组返回新数组对原数组没有影响
可以将整数索引与切片索引混合使用。 但是,这样做会产生比原始数组更低级别的数组。 请注意,这与MATLAB处理数组切片的方式完全不同
row_r1 = a[1, :] # Rank 1 view of the second row of a
row_r2 = a[1:2, :] # Rank 2 view of the second row of a
print(row_r1, row_r1.shape) # Prints “[5 6 7 8] (4,)”
print(row_r2, row_r2.shape) # Prints “[[5 6 7 8]] (1, 4)”
col_r1 = a[:, 1]
col_r2 = a[:, 1:2]
print(col_r1, col_r1.shape) # Prints “[ 2 6 10] (3,)”
print(col_r2, col_r2.shape) # Prints "[[ 2]
3.2.2布尔数组索引
布尔数组索引允许你选择数组的任意元素,这种类型的索引用于选择满足某些条件的数组元素。
a = np.array([[1,2], [3, 4], [5, 6]])
bool_idx = (a > 2) #返回一个布尔类型的数组
print(bool_idx)
print(a[a > 2]) # Prints “[3 4 5 6]”
然后再讲数组传入进去。
3.3 数据类型
每个numpy数组都是相同类型元素的网格。Numpy提供了一组可用于构造数组的大量数值数据类型。Numpy在创建数组时尝试猜测数据类型,但构造数组的函数通常还包含一个可选参数来显式指定数据类型。
x = np.array([1, 2]) # Let numpy choose the datatype
print(x.dtype) # Prints “int64”
x = np.array([1.0, 2.0]) # Let numpy choose the datatype
print(x.dtype) # Prints “float64”
x = np.array([1, 2], dtype=np.int64) # Force a particular datatype
print(x.dtype) # Prints “int64”
3.4 广播(Broadcasting)
广播是一种强大的机制,它允许numpy在执行算术运算时使用不同形状的数组。通常,我们有一个较小的数组和一个较大的数组,我们希望多次使用较小的数组来对较大的数组执行一些操作。
当矩阵 x 非常大时,在Python中计算显式循环可能会很慢。注意,向矩阵 x 的每一行添加向量 v 等同于通过垂直堆叠多个 v 副本来形成矩阵 vv,然后执行元素的求和x 和 vv。
将两个数组一起广播遵循以下规则:
如果数组不具有相同的rank,则将较低等级数组的形状添加1,直到两个形状具有相同的长度。
如果两个数组在维度上具有相同的大小,或者如果其中一个数组在该维度中的大小为1,则称这两个数组在维度上是兼容的。
如果数组在所有维度上兼容,则可以一起广播。
广播之后,每个阵列的行为就好像它的形状等于两个输入数组的形状的元素最大值。
在一个数组的大小为1且另一个数组的大小大于1的任何维度中,第一个数组的行为就像沿着该维度复制一样。
3.5 numpy 中的数组操作
import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum = a + b 加
difference = a - b 减
product = a * b 乘
quotient = a / b 除

**

四.SciPy

**
Numpy提供了一个高性能的多维数组和基本工具来计算和操作这些数组。 而SciPy以此为基础,提供了大量在numpy数组上运行的函数,可用于不同类型的科学和工程应用程序。
熟悉SciPy的最佳方法是浏览它的文档。我们将重点介绍SciPy有关的对你有价值的部分内容。

五.图像操作

5.1 Scipy
提供了一些处理图像的基本函数。例如,它具有将映像从磁盘读入numpy数组、将numpy数组作为映像写入磁盘以及调整映像大小的功能。
#导包
from scipy.misc import imread, imsave, imresize
img = imread(‘assets/cat.jpg’)
print(img.dtype, img.shape)
# We can tint the image by scaling each of the color channels# by a different scalar constant. The image has shape (400, 248, 3);# we multiply it by the array [1, 0.95, 0.9] of shape (3,);# numpy broadcasting means that this leaves the red channel unchanged,# and multiplies the green and blue channels by 0.95 and 0.9# respectively.
img_tinted = img * [1, 0.95, 0.9]

5.2 Matplotlib

Matplotlib是一个绘图库。简要介绍 matplotlib.pyplot 模块,该模块提供了类似于MATLAB的绘图系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值