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]

重点总结

  1. np.array():列表→numpy 数组;数组元素类型统一、内存连续。
  2. 快速造数组:zeros/ones/empty/full/eye
  3. 序列:arange控制步长;linspace控制元素个数,包含终点
  4. 数组属性:shape/size/ndim/dtype/itemsize/nbytes
  5. 布尔索引:data[条件] 筛选 / 批量修改,向量化运算,替代 Python 循环,速度极快
  6. axis:axis=0按列,axis=1按行聚合统计

 

posted @ 2026-10-21 09:57  emanlee  阅读(2)  评论(0)    收藏  举报