



想要拟合计算引力模型中n *p的各个因子指标!运用gravity model,但不知道怎么写到模型中,原模型文档说是支持多维矩阵,但这么写不行。




该回答引用ChatGPT
如有疑问,可以回复我!
在计算重力模型时,通常使用以下公式:
T_ij = K * (M_i * M_j) / d_ij^α
其中,T_ij 表示地点 i 和地点 j 之间的流量;K 是一个常数;M_i 和 M_j 分别是地点 i 和地点 j 的人口、产量等指标;d_ij 表示地点 i 和地点 j 之间的距离;α 是一个常数,通常被设置为 1 或 2。
如果您想要拟合计算引力模型中的 n * p 的各个因子指标,您可以将指标表示为一个 n 行 p 列的矩阵 X,其中每行代表一个地点的指标,每列代表一个指标项。您可以将 M_i 和 M_j 分别表示为矩阵 X 中的两个行向量,然后使用向量乘法计算它们的乘积。例如,如果 M_i 表示矩阵 X 的第 i 行向量,M_j 表示矩阵 X 的第 j 行向量,则它们的乘积可以表示为:
M_i * M_j = X_i * X_j'
其中,X_i 和 X_j' 分别是矩阵 X 的第 i 行和第 j 列向量的转置。
最后,您可以使用一个 n * n 的距离矩阵 D 来表示每对地点之间的距离,其中 D_ij 表示地点 i 和地点 j 之间的距离。您可以将 D 的每个元素取 α 次幂,然后将 T_ij 表示为以下形式:
T_ij = K * (X_i * X_j') / (D_ij^α)
这样,您就可以使用多维矩阵来计算重力模型中的各个因子指标。
代码如下
import numpy as np
def gravity_model(X, D, K, alpha):
# 将距离矩阵中的零值替换为 1e-10
D[D == 0] = 1e-10
# 计算 M_i * M_j
M = np.dot(X, X.T)
# 计算距离的 alpha 次幂
D_alpha = np.power(D, alpha)
# 计算 T_ij
T = K * np.divide(M, D_alpha)
return T
# 示例数据
X = np.array([[100, 200, 300], [400, 500, 600], [700, 800, 900]])
D = np.array([[0, 10, 20], [10, 0, 30], [20, 30, 0]])
K = 0.001
alpha = 2
# 计算重力模型
T = gravity_model(X, D, K, alpha)
print(T)
