Python 现代开发学习笔记

11-04 核对三维 axis

本章题解 · 全部练习

题目

为两位读者保存三天两时段记录,分别统计每位读者总量、每天跨读者总量,以及每个时段总量,画出每个输出由哪些格子组成。

推导与做法

三维轴依次是读者、天、时段。求每位读者的总量,就消去天与时段两个轴,使用 axis=(1,2),得到 [21,57]。

每天跨读者合计消去读者和时段,得到 [18,26,34];每个时段消去读者和天,得到 [36,42]。输出保留哪个轴,就能反推本次应归约哪些轴。

过程图

%% 每个节点保留输入、执行位置或执行后的实际状态。 flowchart TD A["原数组:2读者 × 3天 × 2时段"] A --> B["axis=(1,2):合并天和时段"] B --> C["读者总量:[21,57]"] A --> D["axis=(0,2):合并读者和时段"] D --> E["每天总量:[18,26,34]"] A --> F["axis=(0,1):合并读者和天"] F --> G["时段总量:[36,42]"] classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A linkStyle default stroke:#4657B5

实现与运行

查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。

在配套目录的 NumPy与数值计算/analysis_project 中运行。先按项目 README 执行 uv sync --locked。

# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run python "../../学习索引/参考实现/代码/ch11.py" 11-04

程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。

查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
  "source": [
    [
      [
        1,
        2
      ],
      [
        3,
        4
      ],
      [
        5,
        6
      ]
    ],
    [
      [
        7,
        8
      ],
      [
        9,
        10
      ],
      [
        11,
        12
      ]
    ]
  ],
  "reader": [
    21,
    57
  ],
  "day": [
    18,
    26,
    34
  ],
  "period": [
    36,
    42
  ]
}

笔记正文与全部题解 · Ctrl / ⌘ K