我得到了一个拥有~3000个轨迹的np.ndarray。每个轨迹具有x,y和z坐标以及不同的长度; 150到250之间(时间点)。现在我想删除所有这些轨迹的z坐标。
所以arr.shape
给了我(3000,)
,(3000个轨迹)和(例如)arr[0].shape
得到(3,178)
(三个坐标轴和178个值)。
我找到了多个解释来删除2D数组中的行,我发现np.delete(arr[0], 2, axis=0)
正在为我工作。但是,我并不想删除第一个轨迹的z坐标;我想为每一条轨迹做到这一点。
如果我想用arr[i]
的循环执行此操作,我需要知道每个轨迹的确切长度(它不适合我的目的,只需创建长度最长的数组并用零填充。)
TL; DR:那么如何从[amountOfTrajectories][3][value]
到[amountOfTrajectories][2][value]
的ndarray获取?
目的是将这些轨迹用作创建轨迹的神经网络的标签。所以我想这是一个全新的问题,但是我要求哪种形状适合用作张量流的标签?
此外:谷歌有什么更好的标题和一些条款来找到这个结果?我刚开始使用Python,我担心我在这里错过了一些关键词......
答案 0 :(得分:1)
如果这来自loadmat
,则源可能是带有cell
的MATLAB工作空间,其中包含这些矩阵。
loadmat
显然创建了一个对象dtype的1d数组(相当于cell
,其中squeeze
已开启。
1d对象数组类似于Python list
- 它包含指向内存中数组的指针。这种数组上的大多数操作都使用Python迭代。迭代等效列表通常更快。 (arr.tolist()
)。
alist = [a[:2,:] for a in arr]
应该给你一个数组列表,每个数组形状(2,n)(n
变化)。这会产生新的数组 - 但np.delete
也是如此。
您无法通过一次操作对1d阵列中的所有阵列进行操作。它必须是迭代的。