Numpy 06-Python实验六-2 二维数组矩阵.py
import numpy as np # 从列表创建 arr1 = np.array([1, 2, 3, 4, 5]) print("从列表创建一维数组:\n", arr1) arr2 = np.array( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] ) print("从列表创建二维数组:\n", arr2) # 创建特殊数组 zeros = np.zeros((3, 4)) # 全0数组 ones = np.ones((2, 3)) # 全1数组 empty = np.empty((2, 2)) # 未初始化数组 full = np.full((2, 2), 7) # 填充指定值 identity = np.eye(3) # 单位矩阵 print("全0数组:\n", zeros) print("单位矩阵:\n", identity) print("\n创建一维序列数组") range_arr = np.arange(0, 10, 2) # 类似range,从0到10,步进值2 linear_arr = np.linspace(0, 1, 5) # 等间隔数列,从0到1,取5个数 random_arr = np.random.rand(3, 3) # 二维随机数组 print("arange创建:\n", range_arr) print("linspace创建:\n", linear_arr) print("随机数组:\n", random_arr) print("\n二维数组的属性") arr = np.array([[1, 2, 3], [4, 5, 6]]) print("数组:\n", arr) print("形状:", arr.shape) # 数组维度 print("大小:", arr.size) # 元素总数 print("维度:", arr.ndim) # 轴的数量 print("数据类型:", arr.dtype) # 元素类型 print("每个元素字节数:", arr.itemsize) print("总字节数:", arr.nbytes) print("\n二维数组的数据处理") data = np.array([ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ]) # 数据筛选 filtered = data[data > 5] print("大于5的值:", filtered) # 条件修改 data[data % 2 == 0] = -1 # 将所有偶数改为-1 print("修改后的数据:\n", data) # 数据统计 print("每列均值:", np.mean(data, axis=0)) print("每行最大值:", np.max(data, axis=1))
这段代码是 NumPy 基础入门示例,演示:数组创建、特殊数组、数组属性、布尔索引筛选、条件修改、聚合统计。
import numpy as np
导入 numpy 库,简写别名
np,后续所有 numpy 函数都通过np.xxx调用。
一、从 Python 列表创建数组
arr1 = np.array([1, 2, 3, 4, 5])
print("从列表创建一维数组:\n", arr1)
np.array():把 Python 列表转换成 NumPy 数组(ndarray)arr1:一维数组(1 行,5 个元素) 输出:[1 2 3 4 5]
arr2 = np.array( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] )
print("从列表创建二维数组:\n", arr2)
- 传入嵌套列表 → 生成二维数组(2 行 3 列)
[[1 2 3]
[4 5 6]]
二、创建各类特殊数组
zeros = np.zeros((3, 4)) # 全0数组
np.zeros(shape):创建全部元素为 0 的数组。 (3,4) 是形状:3 行 4 列。
ones = np.ones((2, 3)) # 全1数组
np.ones((2,3)):2 行 3 列,所有元素 = 1。
empty = np.empty((2, 2)) # 未初始化数组
⚠️重点:不是置 0!只分配内存,里面是内存残留的随机垃圾值,速度快,但内容不可预测,需要后续覆盖写入数据。
full = np.full((2, 2), 7) # 填充指定值
np.full(形状,填充值):2 行 2 列,全部元素赋值为 7。
identity = np.eye(3) # 单位矩阵
单位矩阵:3 阶方阵,对角线为 1,其余位置 0
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
print("全0数组:\n", zeros)
print("单位矩阵:\n", identity)
三、生成序列、随机数组
print("\n创建一维序列数组")
range_arr = np.arange(0, 10, 2) # 类似range,从0到10,步进值2
np.arange(start, stop, step)
- 规则:包含 start,不包含 stop
- 0 开始,每次 + 2,不到 10 停止 →
[0 2 4 6 8]
linear_arr = np.linspace(0, 1, 5) # 等间隔数列,从0到1,取5个数
np.linspace(起点,终点,总个数) ✅ 包含终点! 在 0~1 之间均匀切分成 5 个点 输出:[0. 0.25 0.5 0.75 1. ]
和 arange 区别:arange 控制步长;linspace 控制元素总数
random_arr = np.random.rand(3, 3) # 二维随机数组
np.random.rand(行,列):生成 [0,1) 区间的浮点数随机数组,3 行 3 列。
print("arange创建:\n", range_arr)
print("linspace创建:\n", linear_arr)
print("随机数组:\n", random_arr)
四、二维数组的属性(ndarray 核心属性)
print("\n二维数组的属性")
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("数组:\n", arr)
print("形状:", arr.shape) # 数组维度
shape:返回元组 (行数,列数),这里结果(2,3),2 行 3 列。
print("大小:", arr.size) # 元素总数
size:数组一共有多少元素,2×3=6。
print("维度:", arr.ndim) # 轴的数量
ndim:数组维数。一维数组 ndim=1;二维 ndim=2。
print("数据类型:", arr.dtype) # 元素类型
dtype:数组内部元素类型,这里是int64(整数)。NumPy 数组所有元素类型必须相同,和 Python 列表不一样。
print("每个元素字节数:", arr.itemsize)
itemsize:单个元素占用内存字节数。int64 占 8 字节。
print("总字节数:", arr.nbytes)
nbytes = size × itemsize,整个数组占用总内存。6×8=48 字节。
记忆:
- shape:几行几列
- size:总元素个数
- ndim:几维
- dtype:元素是什么类型
- itemsize:单个元素占多少字节
- nbytes:全部内存大小
五、数组条件筛选、修改、统计(布尔索引,NumPy 强大功能)
print("\n二维数组的数据处理")
data = np.array([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
])
定义 3 行 4 列二维数组
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
# 数据筛选
filtered = data[data > 5]
print("大于5的值:", filtered)
data>5:会生成一个布尔数组(True/False 掩码),和 data 形状相同,满足条件为 True。 data[布尔掩码] → 取出所有 True 位置对应的元素,返回一维数组 结果:[ 6 7 8 9 10 11 12] 👉 这个叫布尔索引,NumPy 最常用的数据筛选方式,不需要写 for 循环。
# 条件修改
data[data % 2 == 0] = -1 # 将所有偶数改为-1
print("修改后的数据:\n", data)
data % 2 ==0:判断每个元素是否是偶数。 找到所有偶数位置,直接批量赋值 -1。
✨亮点:一行代码批量修改,底层 C 运算,不用 Python 循环! 修改后数组:
[[ 1 -1 3 -1]
[ 5 -1 7 -1]
[ 9 -1 11 -1]]
# 数据统计
print("每列均值:", np.mean(data, axis=0))
print("每行最大值:", np.max(data, axis=1))
np.mean():求平均值np.max():求最大值axis参数非常关键:axis=0:沿着行方向压缩,按列计算 → 每一列算一个均值axis=1:沿着列方向压缩,按行计算 → 每一行算一个最大值
输出示例:
每列均值: [5. -0.33333333 7. 2.33333333]
每行最大值: [ 3 7 11]
重点总结
np.array():列表→numpy 数组;数组元素类型统一、内存连续。- 快速造数组:
zeros/ones/empty/full/eye - 序列:
arange控制步长;linspace控制元素个数,包含终点 - 数组属性:
shape/size/ndim/dtype/itemsize/nbytes - 布尔索引:
data[条件]筛选 / 批量修改,向量化运算,替代 Python 循环,速度极快 axis:axis=0按列,axis=1按行聚合统计

浙公网安备 33010602011771号