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

Python中基于X/Y网格计算注水井流函数出现ValueError问题咨询

报错根因
  • 井名匹配不一致:你示例CSV中井名格式为MW-1、MW-2,但代码筛选时用的是MW1,匹配结果异常;且直接取MW1['Q']得到的是带索引的pandas Series对象,和numpy数组运算时会触发pandas的索引对齐校验,最终抛出长度不匹配错误。
  • 冗余操作导致维度混乱:额外加的np.vectorize封装、X[None,:]维度扩展完全没必要,numpy原生支持广播运算,多余的维度调整会导致运算维度不匹配。
修复后可运行代码
import pandas as pd
import math
import numpy as np

IW = pd.read_csv(r'Injection_wells.csv')

# 提取单井参数转成标量,避免Series索引问题,同时修正井名匹配规则
mw1_q = IW[IW['Name'] == 'MW-1']['Q'].values[0]
mw1_x = IW[IW['Name'] == 'MW-1']['X'].values[0]
mw1_y = IW[IW['Name'] == 'MW-1']['Y'].values[0]

mw2_q = IW[IW['Name'] == 'MW-2']['Q'].values[0]
mw2_x = IW[IW['Name'] == 'MW-2']['X'].values[0]
mw2_y = IW[IW['Name'] == 'MW-2']['Y'].values[0]

mw3_q = IW[IW['Name'] == 'MW-3']['Q'].values[0]
mw3_x = IW[IW['Name'] == 'MW-3']['X'].values[0]
mw3_y = IW[IW['Name'] == 'MW-3']['Y'].values[0]

# 初始化网格
xi = np.linspace(2517675,2517800,625)
yi = np.linspace(996300,996375,375)
X,Y = np.meshgrid(xi,yi)

# 直接用numpy广播完成全网格计算,用arctan2避免除零问题
PSI = (mw1_q/(2*math.pi)) * np.arctan2(X - mw1_x, Y - mw1_y) + \
      (mw2_q/(2*math.pi)) * np.arctan2(X - mw2_x, Y - mw2_y) + \
      (mw3_q/(2*math.pi)) * np.arctan2(X - mw3_x, Y - mw3_y)
核心修改说明
  • 提取井参数时用.values[0]把pandas Series转为纯数值标量,完全规避pandas索引对齐的校验逻辑
  • 修正井名匹配规则,和CSV中存储的MW-1格式完全对齐
  • 移除冗余的np.vectorize和多余的维度扩展,直接用numpy原生广播能力完成全网格计算,运算效率更高
  • 用np.arctan2替代np.arctan,自动处理除数为0的边界情况,得到的方位角结果范围更符合渗流场流函数计算的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:02