0

我正在尝试使用以下 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]分别是浮点xy值的列表。这会产生以下错误:

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().

以下建议的链接提供了一些背景,说明为什么初始代码不起作用,但似乎没有为我的特定问题提供解决方案。 堆栈溢出答案

4

0 回答 0