gpt4 book ai didi

python - 双迭代线构造

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:31 26 4
gpt4 key购买 nike

我正在尝试构建一个线集合,以便在不同的时间步长下跟踪晶石的变形。我设法使用以下定义正确绘制单个时间步长的线:

lstLines = [((xb, yb, zb), (xe, ye, ze)) for (xb, xe, yb, ye, zb, ze) in \
zip(Spar_Res[i,:-1,0], Spar_Res[i,1:,0], Spar_Res[i,:-1,1], Spar_Res[i,1:,1],Spar_Res[i,:-1,2],Spar_Res[i,1:,2]) for i in range(Spar_Res.shape[0])]

这里(x,y,z)中的索引b和e分别代表段的开始和结束,Spar_Res是一个numpy数组,时间在0轴上,spar的顶点在1轴上和 2 轴上的 (x,y,z) 坐标。我希望随着时间的推移添加一个额外的循环,这里是索引 i,可以解决问题,但我认为我放错了循环或以某种方式弄错了。

关于如何通过同时迭代来正确构建线集合的任何想法?

最佳答案

我不明白你想做什么,但我已经使用连接和 reshape 以更清晰的形式写了一些接近你上面的东西。我认为,如果您从这些方面考虑您的数据,您的任务将变得容易得多。其中T为时间点数,V为顶点数。

# This takes your data and creates a new array that is (T, V-1, 2, 3)
lstLines = np.concatenate((Spar_Res[:, :-1, None, :],
Spar_Res[:, 1:, None, :]), axis=2)
# This reshapes the array to be (T * (V - 1), 2, 3)
lstLines = lstLines.reshape(-1, 2, 3)

上面的代码等价于:

lstLines = [((xb, yb, zb), (xe, ye, ze)) for i in range(Spar_Res.shape[0])
for (xb, xe, yb, ye, zb, ze) in zip(Spar_Res[i,:-1,0], Spar_Res[i,1:,0],
Spar_Res[i,:-1,1], Spar_Res[i,1:,1],
Spar_Res[i,:-1,2], Spar_Res[i,1:,2])
]
lstLines = np.array(lstLines)

关于python - 双迭代线构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com