将布尔计算与索引更改相结合,无需列表理解

Combining boolean evaluation with indexing change without list comprehension

提问人:stagermane 提问时间:4/28/2017 更新时间:4/28/2017 访问量:54

问:

我正在处理一个问题,该问题涉及细分作为索引存储在三个索引数组中的边,因为该项目需要知道前一个节点、当前节点和下一个节点的信息。

例如,在每条边上细分一组 3 条边,以生成一组 6 条边。

边缘信息最初以两个索引矩阵的形式输入,具有以下几何信息。

Global information matrix (key to index)
<Key>   <Global Location>
"1"            0
"0"            1
"3"            2
"2"            3

numpy矩阵中对应的坐标信息为:

 <Coordinates>
 [[3.0, 0.0, 3.0]
  [0.0, 0.0, 0.0]
  [10.0, 0.0, 0.0]
  [7.0, 0.0, 3.0]

方向连通性 (pt0, pt1) 存储为索引矩阵,

pt0_index = [1 0 3 0]
pt1_index = [0 1 2 3]
pt2_index = [3 0 0 2]

我的第一个问题是,是否有办法分别在键“0”和“0”的 pt2 索引和 pt2 索引中存储“Null”值。我一直在通过逻辑数组解决边界条件节点的任何问题,如下所示:

start_pts = [False True False False]
end_pts   = [False False True False] 

我的下一个问题涉及能够隔离在细分过程中需要更改的边缘索引。我一直在通过几个for循环来完成这个,但我认为一定有更好的方法。在此示例中,所有 3 条边都将被细分,因此新点将添加到全局信息矩阵中,即现在:

Global information matrix (key to index)
<Key>   <Global Location>
"1"            0
"0"            1
"3"            2
"2"            3
"4"            4
"5"            5
"6"            6

 <Coordinates>
 [[3.0, 0.0, 3.0]
  [0.0, 0.0, 0.0]
  [10.0, 0.0, 0.0]
  [7.0, 0.0, 3.0]
  [1.5, 0.0, 1.5]
  [8.5, 0.0, 1.5]
  [5.0, 0.0, 3.0]]

基于这些插入,pt0、pt1 和 pt2 的索引数组现在应如下所示:

pt0 = [4 0 5 6 1 3 0]
pt1 = [0 1 2 3 4 5 6]
pt2 = [6 4 0 5 0 2 3]

*请记住,重复的“0”索引是由于起始节点和结束节点造成的

我有一个函数,可以将边缘索引作为新点的元组返回。

new_edges = set([(1, 0), (3, 2), (0, 3)})

我正在通过一系列 for 循环编辑索引矩阵,如下所示(为起始边缘给出的示例):

ind_change = []
for pt,_ in new edges:
    all_pts = where(pt0_index == pt)[0][:].tolist()
    for sub_pt in all_pts:
        if start_pts[sub_pt] == False:
            ind_change.append(sub_pt)

基本上,我想要新边(0、2、3)起点的索引位置,而没有起点索引

有没有办法将布尔计算与索引搜索相结合?

python 数组 numpy 矩阵 逻辑

评论

0赞 Elmex80s 4/29/2017
我不明白前两句话。这是一个图论问题吗?
0赞 hpaulj 4/29/2017
你不需要这个部分。它可以循环访问数组。[:].tolist()where(...)[0]
1赞 stagermane 4/29/2017
@Elmex80s,我正在使用一个网络数据结构,其中节点通过定向边连接。我在每个节点上进行的计算只需要了解空间中的上一个节点位置、当前节点位置和下一个节点位置。
0赞 Elmex80s 4/29/2017
我认为你给了我们太多的信息。第一个问题可以单独提出。第一个问题是与numpy相关的,不是吗?
1赞 stagermane 5/1/2017
@Elmex80s,同意了。我将其改写为 2 个问题。感谢您的反馈!

答: 暂无答案