python - 使用掩码在向量化方程 numpy 之间进行选择
问题描述
我有一个掩码操作问题。我在具有边界条件的网格(矩阵)上使用有限差分法。要计算边界条件,我使用能量平衡。所以我有 5 个矢量化方程 (Eq0 - Eq4),BC 声明要用于索引的方程。要选择 Eq,我使用掩码:
mask = [0,1,2,3,4]
I = np.identity(5)
e0, e1, e2, e3, e4 = I[:,0], I[:,1], I[:,2], I[:,3], I[:,4]
BC 是我的案例矩阵,用于该索引的方程式。喜欢:
BC =
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 1. ... 2. 2. 0.]
[0. 0. 4. ... 4. 0. 0.]
...
[0. 0. 4. ... 4. 0. 0.]
[0. 0. 3. ... 3. 3. 0.]
[0. 0. 0. ... 0. 0. 0.]]
for n in range(1,Nt):
Mn = np.copy(M)
M[1:Nx,1:Ny] = (mask==BC[1:Nx,1:Ny]).dot(e0) * Eq0 + (mask==BC[1:Nx,1:Ny]).dot(e1) * Eq1 + (mask==BC[1:Nx,1:Ny]).dot(e2) * Eq2 + (mask==BC[1:Nx,1:Ny]).dot(e3) * Eq3 + (mask==BC[1:Nx,1:Ny]).dot(e4) * Eq4
我尝试了不同的方法来掩盖方程式,但总是出错。
np.dot(mask==BC[1:Nx,1:Ny],e0) --> ValueError: operands could not be broadcast together with shapes (18,) (51,51)
(1*(mask==BC[1:Nx,1:Ny])).dot(e0) --> AttributeError: 'int' object has no attribute 'dot'
AttributeError: 'bool' object has no attribute 'dot'
我希望你能解决我的问题并能提供帮助。谢谢
解决方案
我想你想要的是:
Eq = np.diag([Eq0, Eq1, Eq2, Eq3, Eq4])
然后你的最后一行将是
M[1:Nx,1:Ny] = (mask[None, None, :] == BC[1:Nx, 1:Ny]).dot(Eq).sum(-1)
但是如果没有可运行的代码,就很难确定。
推荐阅读
- python-3.x - 通过文本搜索时汤没有找到正确的 div 标签
- c# - 如何在 ASP.NET Core 中创建多个 WebApi 端点
- python - 根据另一列的实现规则将列添加到数据框中
- json - 使用 JQ 的多个语句:累积多个字段
- javascript - javascript中的python身材匀称的unary_union
- c# - Sql连接C#登录失败
- flutter - 使用 Riverpod 处理身份验证
- python - 如何使用 Opengl 在 pygame 中制作可调整大小的窗口
- android - 使用 expo-notifications 包的 React Native 独立 android 构建没有推送通知
- c# - 使用对象初始化器时有没有办法初始化私有类成员?