从每个第一级索引(Python)的不同长度的3D数组中删除列

时间:2018-03-24 18:57:52

标签: python arrays numpy tensorflow

我得到了一个拥有~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,我担心我在这里错过了一些关键词......

1 个答案:

答案 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阵列中的所有阵列进行操作。它必须是迭代的。