一、NumPy简介
1.定义:
NumPy是一个开源的Python科学计算库,主要用于数组和矩阵的操作,能够简化代码编写,减少循环语句的使用。
2.功能:
提供大量数学函数,方便进行科学计算。
二、Ndarray对象
1.定义:
N维数组,用于存放同类型元素的多维数组,以0为下标起始。
2.功能:
支持多种创建方式和操作。
三、创建Ndarray数组对象
常用函数:
array()
:从Python列表或元组创建数组。
empty()
:创建未初始化的数组。
zeros()
:创建全0数组。
ones()
:创建全1数组。
full()
:创建指定值填充的数组。
eye()
:创建单位矩阵。
arange()
:创建等差数组。
frombuffer()
:从缓冲区创建数组。
linspace()
:创建等间隔数组。等差
logspace()
:创建对数间隔数组。等比
random.rand()
:创建随机数组(均匀分布)。
random.random()
:创建随机数组(0到1之间)。
random.randint()
:创建随机整数数组。
random.randn()
:创建正态分布随机数组。
random.normal()
:创建正态分布随机数组。
四、Ndarray数组属性
主要属性:
ndim
:数组的维度数量。shape
:数组的维度形状。
size
:数组元素的总个数。dtype
:数组元素的数据类型。
import random
li = []
for i in range(10000000):
li.append(random.random())
import time
t1 = time.time()
ret = sum(li)
t2 = time.time()
print("耗时:%f" % (t2 - t1))
print(ret)
耗时:0.046495
5000088.736804608
import numpy as np
n = np.array(li)
t1 = time.time()
ret = np.sum(n)
t2 = time.time()
print("耗时:%f" % (t2 - t1))
print(ret)
耗时:0.011325
5000088.736804878
import numpy as np
arr = np.arange(24)
print(arr)
print(arr.ndim)
arr2 = arr.reshape(2, 3, 4)
print(arr2)
print(arr2.ndim)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
1
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
3
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
print(arr.shape)
[[1 2 3]
[4 5 6]]
(2, 3)
五、切片和索引
操作方式:
支持基于索引和切片的访问与修改。切片操作与Python列表类似。支持使用省略号“...”进行多维数组的切片。
六、课堂练习
练习题目:
生成一个3×3的对角矩阵。
import numpy as np
a1 = np.eye(3)
print(a1)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
创建一个长度为10的数组,值为0到1之间,不包含首尾。
a2 = np.linspace(0, 1, 12)[1:-1]
print(a2)
[0.09090909 0.18181818 0.27272727 0.36363636 0.45454545 0.54545455
0.63636364 0.72727273 0.81818182 0.90909091]
创建一个长度为10的0数组,第5个值为1。
a3 = np.zeros(10)
a3[4] = 1
print(a3)
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
创建一个值从30到50,步长为2的数组。
a4 = np.arange(30, 51, 2)
print(a4)
[30 32 34 36 38 40 42 44 46 48 50]
创建一个四边为1,中间为0的二维数组。
a5 = np.ones((5, 5))
a5[1:-1, 1:-1] = 0
print(a5)
[[1. 1. 1. 1. 1.]
[1. 0. 0. 0. 1.]
[1. 0. 0. 0. 1.]
[1. 0. 0. 0. 1.]
[1. 1. 1. 1. 1.]]
创建一个2×3的二维数组,并输出其维度、行数和列数、元素个数。
import numpy as np
arr = np.arange(1, 7).reshape(2, 3)
print("数组内容:")
print(arr)
print("维度:", arr.ndim)
print("行数:", arr.shape[0])
print("列数:", arr.shape[1])
print("元素个数:", arr.size)
数组内容:
[[1 2 3]
[4 5 6]]
维度: 2
行数: 2
列数: 3
元素个数: 6
给定一个6×7×8的三维矩阵,求第100个元素的索引。
import numpy as np
shape = (6,7,8)
num = 99
i = num // (7*8)#层
j = (num // 8) % 7 #行
k = num % 8 #列
print(i,j,k)
1 5 3
如何交换二维数组中的两列。
import numpy as np
arr = np.arange(12).reshape(3, 4)
print("原始数组:\n", arr)
arr[[1, 2]] = arr[[2, 1]]
print("\n交换第 1 行和第 2 行后的数组:\n", arr)
原始数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
交换第 1 行和第 2 行后的数组:
[[ 0 1 2 3]
[ 8 9 10 11]
[ 4 5 6 7]]
这些练习涵盖了NumPy的基本操作,包括数组的创建、索引、切片、属性访问以及一些常见的数组操作。通过这些练习,可以快速掌握NumPy的基本用法,为更复杂的科学计算打下基础。