提问人:stagermane 提问时间:4/28/2017 更新时间:4/28/2017 访问量:54
将布尔计算与索引更改相结合,无需列表理解
Combining boolean evaluation with indexing change without list comprehension
问:
我正在处理一个问题,该问题涉及细分作为索引存储在三个索引数组中的边,因为该项目需要知道前一个节点、当前节点和下一个节点的信息。
例如,在每条边上细分一组 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)起点的索引位置,而没有起点索引
有没有办法将布尔计算与索引搜索相结合?
答: 暂无答案
评论
[:].tolist()
where(...)[0]