机器学习——python基础一python NumPy教程

一、python NumPy教程

1.简介

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

2.NumPy Ndarray对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。(可以用来组织矩阵

1)创建Ndarray

直接创建:

matrix2 = np.array([  # 生成矩阵
    [1, 2, 3],
    [2, 4, 6],
    [3, 6, 9],
    [4, 8, 12]
])

利用方法创建特殊矩阵-empty/zero/ones. /range(start, stop, step, dtype)

matrix4 = np.zeros((5, 5), dtype=np.int)
print (matrix4)
matrix5 = np.ones((5, 5), dtype=np.int)
print (matrix5)
matrix6 = np.arange(10, 10000, 200)
print (matrix6)
2)数组的属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SyHDwzWC-1602755542156)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20201014155955603.png)]

数组的维数-NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

matrix3 = np.array([
    [
        [1, 2, 3]
    ],
    [
        [2, 4, 6]
    ]
])
print (matrix3.ndim)

数组的维度,对于矩阵,n行m列

matrix2 = np.array([  # 生成矩阵
    [1, 2, 3],
    [2, 4, 6],
    [3, 6, 9],
    [4, 8, 12]
])
print (matrix2)
print ("row=" + str(matrix2.shape[0]))
print ("col=" + str(matrix2.shape[1]))
print ("elements=" + str(matrix2.size))
3)数组的切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

# 切片和索引
a1 = matrix7[2:]
print (a1)
a2 = matrix7[2]
print (a2)
a3 = matrix7[2:9:2]  # 不包括停止索引
print (a3)
a4 = matrix2[0]  # 二维数组是行的序号
print (a4)
a5 = matrix2[..., 1]  # 列向量
print (a5)

3.广播机制

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

广播的规则:

扫描二维码关注公众号,回复: 12624885 查看本文章

对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

若条件不满足,抛出 “ValueError: frames are not aligned” 异常。

第一段和第二段程序会通过,但第三段程序会报错。

a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
c = a * b
print (c)

a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b = np.array([1, 2, 3])
print(a * b)

a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b = np.array([
    [1, 2, 3],
    [2, 4, 6]
])
print(a + b)

4.NumPy 矩阵库(Matrix)

NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。

一个 img的矩阵是一个由img行(row)img列(column)元素排列成的矩形阵列。

# coding=utf-8
import numpy.matlib
import numpy as np

matrix = np.arange(20).reshape(4, 5)
p = np.array([1, 1, 1, 1, 1])
matrix = matrix+p
print (matrix)
print ("矩阵的转置为:")
print (matrix.T)

print ("对角矩阵:")
print (np.eye(5, 3))

print ("numpy.matlib.identity() 函数返回给定大小的单位矩阵。")
print (np.matlib.identity(5))

print ("numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。")
print (np.matlib.rand(3, 2))

5.NumPy 线性代数库linalg

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPbKbgcz-1602755542162)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20201014162445558.png)]

# 求行列式的值|A|
c = np.array([
    [11, 12],
    [13, 14]
])
print (np.linalg.det(c))
print

# 解方程
a = np.array([
    [1, 5],
    [2, 1]
])
b = np.array([
    [8],
    [7]
])

number = a.shape[0]
i = 0
while i < number:
    print ("第"+str(i+1)+"个变量的值为:")
    print (np.linalg.solve(a, b)[i][0])
    i = i+1
# 求矩阵的逆
c = np.array([
    [11, 12],
    [13, 14]
])
print (np.linalg.inv(c))

6.Numpy I/O函数

Numpy 可以读写磁盘上的文本数据或二进制数据。

NumPy 为 ndarray 对象引入了一个简单的文件格式:npy

npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。

常用的 IO 函数有:

  • load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。
  • savez() 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中。
  • loadtxt() 和 savetxt() 函数处理正常的文本文件(.txt 等)
a = np.array([
    [1, 2, 3, 4, 5],
    [2, 3, 4, 5, 6],
    [3, 4, 5, 6, 7]
])

# 保存到 outfile.npy 文件上
np.save('outfile.npy', a)

# 保存到 outfile2.npy 文件上,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上
np.save('outfile2', a.T)

# 当直接查看文件时,文件是乱码的,因为它们是 Numpy 专用的二进制格式后的数据。
# 我们可以使用 load() 函数来读取数据就可以正常显示了:
b = np.load('outfile2.npy')
print (b)

a = np.array([1, 2, 3, 4, 5])
np.savetxt('out.txt', a)
b = np.loadtxt('in.txt')

print(b)

NumPy Matplotlib Python 的绘图库

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

详见下一篇文章

猜你喜欢

转载自blog.csdn.net/joey_ro/article/details/109102201