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