【发布时间】:2021-05-12 09:32:54
【问题描述】:
我有一个 numpy 数组列表,并希望根据每个数组的长度重新排列它。这是我的清单:
nums=[np.array([[2.], [3.]]), np.array([[8.], [7.], [1.]]),\
np.array([[1.], [0.], [5.]]), np.array([[8.], [9.]]), np.array([[7.], [6.]])]
当数组的长度发生变化时,这一点很重要。长度列表是:
lns=[2, 3, 3, 2, 2]
基于lns,长度从第一个数组变为第二个数组。第一个数组更短,我想要它的所有行。我想要2(较短数组的长度)行较长(第二)行。在这种情况下,较短数组 (2.5) 的平均值小于较长数组 (5.3) 的平均值,因此我提取了较长数组的第一行 2。我想要第二个和第三个数组,因为它们的长度是最大的。从第三到第四长度变化。同样,我想要所有更短的行和2(更短的长度,即第四行)。但是,较短 (8.5) 的平均值高于较长 (2.)。所以,我需要较长的最后一行2。最后,我想重新排列我的列表以获得以下列表:
final=[np.array([[2.], [3.], [8.], [7.]]),\ # all rows of first and first 2 rows of second
np.array([[8.], [7.], [1.], [1.], [0.], [5.]]),\
np.array([[0.], [5.], [8.], [9.], [7.], [6.]])]# last 2 rows of third and all rows of next short arrays
感谢任何帮助我在 python 中做我想做的事。
【问题讨论】:
-
1. 显示您尝试过的内容。 2. 你的逻辑有点过于复杂了。第一个数组的长度为 2,但在
final中它的长度为 4。3. 为什么第二个和第三个数组在final中合并为一个数组?因为长度一样? 4. 取前 2 个元素(较短的 neighbour 的长度)还是取最后 2 个元素是基于两个数组的平均值?还是基于哪个数组先出现? 5. 您使用了 numpy 数组但未标记 numpy。您实际上是在使用 numpy 数组还是 Python 数组或常规 Python 列表? -
好的,所以根据另一个问题,你会得到一个任意的点列表(在 2D 空间中,在另一个问题中,但实际上是 3D 空间),可能 表示形状。并且您想在 2D/3D 中创建相交的形状;并忽略不能形成封闭多边形的点(所以线不好)。有这样的描述更好。此外,1D 版本也无济于事,因为它有一些不相关的因素——比如取平均值。如果两个相邻的形状有非常不同的大小并且没有连接,那么做那个“平均”的事情没有任何帮助。
-
附言。你不需要每次都说亲爱的。零次/一次就足够了:-)
-
我会说等一下再打开更多问题。如果 48 小时后没有满意的答案,您可以在另一个问题上add a bounty。我可以尝试回答这个问题,但它实际上并不能解决您在原始问题上遇到的问题。
-
@aneroid,实际上我的观点是 3d(
x,y和z)。但我只根据x和y重新排列它们。
标签: python arrays algorithm split