You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过无循环矩阵乘法计算区域供给对应的流入流出列表

无循环实现区域流入流出计算的numpy方案

直接用numpy的广播与掩码运算即可实现全向量化计算,完全不需要显式for循环,适配大矩阵场景:

核心逻辑

  1. 先通过广播运算生成全量转移矩阵,每个元素对应从起点区域到终点区域的实际转移供给量
  2. 用单位矩阵生成掩码,过滤掉起点、目的地为同一区域的自转移数据
  3. 按行求和得到各区域流出量,按列求和得到各区域流入量

完整实现代码

import numpy as np

# 输入数据
Supply = np.array([10, 20])
OD_matrix = np.array([0.3,0.7,0.5,0.5]).reshape(2,2)

# 生成全量OD转移矩阵(i行j列对应区域i到区域j的转移供给量)
flow_matrix = Supply[:, np.newaxis] * OD_matrix
# 生成自转移掩码:对角线为0,其余位置为1
mask = 1 - np.eye(OD_matrix.shape[0], dtype=OD_matrix.dtype)

# 计算流出量:行求和,排除自转移
Out = (flow_matrix * mask).sum(axis=1)
# 计算流入量:列求和,排除自转移
In = (flow_matrix * mask).sum(axis=0)
# 更新后的供给量,和原有dot运算结果完全一致
Updated_Supply = flow_matrix.sum(axis=0)

输出验证

打印上述变量结果:

Supply [10, 20]
In [10.0, 7.0]
Out [7.0, 10.0]
Updated Supply [13.0, 17.0]

和你给出的示例输出完全匹配。该方案基于numpy底层优化的向量化运算,即使是上万维度的大OD矩阵,也能在短时间内完成计算,性能远高于手动循环实现。

内容的提问来源于stack exchange,提问作者Yun Hyunsoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:00:03