我正在尝试使用以下 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()
.
以下建议的链接提供了一些背景,说明为什么初始代码不起作用,但似乎没有为我的特定问题提供解决方案。 堆栈溢出答案