一、实验目的
1. 了解numpy库的基本功能
2. 掌握Numpy库的对数组的操作与运算
二、实验工具:
1. Anaconda
2. Numpy
三、Numpy简介
Numpy 的英文全称为 Numerical Python,指Python 面向数值计算的第三方库。Numpy 的特点在于,针对 Python 内建的数组类型做了扩充,支持更高维度的数组和矩阵运算,以及更丰富的数学函数。Numpy 是 Scipy.org 中最重要的库之一,它同时也被 Pandas,Matplotlib 等我们熟知的第三方库作为核心计算库。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
Numpy包括了:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。Numpy和稀疏矩阵运算包scipy配合使用更加方便。
四、实验内容
1. 数组的创建(创建全0数组,全1数组,随机数数组)
#数组的创建(创建全0数组,全1数组,随机数数组)
import numpy as np
a=np.zeros(5)
b=np.ones(5)
c=np.random.randint(0,5)
print(a,b,c)
2. 数组的属性(查看数组的维度,数组元素的个数)
#数组的属性(查看数组的维度,数组元素的个数)
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a.shape)
print(a.size)
3. 数组的维度操作(将数组的行变列,返回最后一个元素,返回第2到第4个元素,返回逆序的数组)
a=np.array([[1,2,3],[4,5,6]])
#数组的维度操作(将数组的行变列,返回最后一个元素,返回第2到第4个元素,返回逆序的数组)
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.T)
print(a[-1])
print(a[1:4])
print(a[::-1])
4. 数组的合并(数组的水平合并,垂直合并,深度合并)
a=np.arange(9).reshape(3,3)
b=np.arange(9).reshape(3,3)
#数组的合并(数组的水平合并,垂直合并,深度合并)
import numpy as np
a=np.arange(9).reshape(3,3)
b=np.arange(9).reshape(3,3)
c=np.hstack((a,b))
print(c)
d=np.vstack((a,b))
print(d)
e=np.dstack((a,b))
print(e)
5. 数组的拆分(数组的水平拆分,垂直拆分,深度拆分)
a=np.arange(27).reshape(3,3,3)
#数组的拆分(数组的水平拆分,垂直拆分,深度拆分)
import numpy as np
a=np.arange(27).reshape(3,3,3)
c=np.hsplit(a,3)
print(c)
d=np.vsplit(a,3)
print(d)
e=np.dsplit(a,3)
print(e)
6. 数组运算(与常的四则运算,与数组的四则运算,判断数组是否相等)
a=np.arange(4,dtype=np.float32).reshape(2,2)
b=np.arange(4,8,dtype=np.float32).reshape(2,2)
:
#数组运算(与常的四则运算,与数组的四则运算,判断数组是否相等)
import numpy as np
a=np.arange(4,dtype=np.float32).reshape(2,2)
b=np.arange(4,8,dtype=np.float32).reshape(2,2)
constant=5
print(a+constant)
print(a-constant)
print(a*constant)
print(a/constant)
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a==b)
print(a!=b)
7. 数组的常用函数(数组所有元素的和、积、平均值、最大值、最小值、元素替换、方差、标准差)
a=np.array([3,2,4])
#数组的常用函数(数组所有元素的和、积、平均值、最大值、最小值、元素替换、方差、标准差)
import numpy as np
a=np.array([3,2,4])
print(np.sum(a))
print(np.prod(a))
print(np.mean(a))
print(np.max(a))
print(np.min(a))
a[0]=10
print(a)
print(np.std(a))
print(np.var(a))
8.创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1
#创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1
import numpy as np
a=np.zeros(10)
a[4]=1
print(a)
9.运行以下代码,理解每句代码的意思或输出结果(print 语句):
(a)
mysqrt = [math.sqrt(x) for x in range(0,5)]
mycrt = [x**(1/3) for x in range(0,5)]
npData = np.array(mysqrt)
print(“The shape:”, npData.shape)
print(“The dimensionality:”, npData.ndim)
print(“The type:”, npData.dtype)
twoDarray = np.array([mysqrt, mycrt])
print(“The shape:”, twoDarray.shape)
print(“The dimensionality:”, twoDarray.ndim)
print(“The type:”, twoDarray.dtype)
(b)
zeros = np.zeros(3)
zMat = np.zeros((4,3))
ones = np.ones(3)
oMat = np.ones((3,2))
diag = np.eye(4)
rng = np.arange(5)
dm = np.diag(rng)
print(dm.shape)
zMat_re = zMat.reshape(6,2)
Print(zMat_re)
( c )
A = np.random.randint(0,10, size = (3,2))
B = np.random.randint(0,10, size = (3,3,3))
C = np.random.randint(0,10, size = (3,1))
print(A**2)
print(np.sqrt(A))
print(A + C)
print(B + C)
B[:, 0:2 , 0:2 ] -= 20
print(B)
10. 给定一个矩阵 2n×2n,将该矩阵分成四个象限(参见示例),然后返回一个新的 2×2 矩阵,包含每个象限的平均值。
例子:
#给定一个矩阵 2n×2n,将该矩阵分成四个象限,然后返回一个新的 2×2 矩阵,包含每个象限的平均值。
import numpy as np
def quadrant_averages(matrix):
# 检查输入矩阵的维度
if matrix.shape[0] != matrix.shape[1] or matrix.shape[0] % 2 != 0:
raise ValueError("输入矩阵必须是2n×2n的维度")
n = matrix.shape[0] // 2
# 分割矩阵为四个象限
q1 = matrix[:n, :n]
q2 = matrix[:n, n:]
q3 = matrix[n:, :n]
q4 = matrix[n:, n:]
# 计算每个象限的平均值
avg_q1 = np.mean(q1)
avg_q2 = np.mean(q2)
avg_q3 = np.mean(q3)
avg_q4 = np.mean(q4)
# 返回包含每个象限平均值的2x2矩阵
return np.array([[avg_q1, avg_q2], [avg_q3, avg_q4]])
# 测试函数
matrix = np.array([[1, 2, 5, 7],
[4, 1, 8, 0],
[2, 0, 5, 1],
[0, 2, 1, 1]])
print(quadrant_averages(matrix))