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
]
}