我正在尝试使用以下python代码确定2D域中的边界节点索引,
import numpy as np
...
b_index0 = np.where( (nodeDat[:,2] == xu) or
(nodeDat[:,2] == xl) or
(nodeDat[:,3] == yu) or
(nodeDat[:,3] == yl) )
其中nodeDate[:,2]
和nodeDat[:3]
分别是浮点x
和y
值的列表。
这将产生以下错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我使用np.add()和np.all()尝试了多种变体,但似乎没有任何作用。
如果我使用|
而不是or
,则会出现以下错误:
ValueError: could not broadcast input array from shape (200) into shape (1)
通过实验,我发现以下代码生成了200个索引的正确列表,这是我要求的答案:
b_index00 = np.where(nodeDat[:,2] == xu)
b_index01 = np.where(nodeDat[:,2] == xl)
b_index02 = np.where(nodeDat[:,3] == yu)
b_index03 = np.where(nodeDat[:,3] == yl)
b_index0 = np.unique(np.hstack((b_index00, b_index01,b_index02, b_index03)))
但是,这似乎是获得所需结果的一种低效/模糊的方法。它还会产生重复的索引,因此会调用np.unique()
。
以下建议的链接提供了一些背景信息,说明为什么初始代码不起作用,但似乎没有为我的特定问题提供解决方案。 stackoverflow answer