【发布时间】:2021-08-28 20:16:12
【问题描述】:
我希望计算 3D NumPy 数组中唯一行的数量。取以下数组:
a = np.array([[[1, 2], [1, 2], [2, 3]], [[2, 3], [2, 3], [3, 4]], [[1, 2], [1, 2], [1, 2]]])
我想要的输出是一个与 3-D 数组的轴 0 长度相同的 1-D 数组。 array([2, 2, 1]).
在此示例中,输出将为 2, 2, 1,因为在第一个分组中 [1, 2] 和 [2, 3] 是唯一值,在第二个分组中 [2, 3] 和 [3, 4] 是唯一值,第三组 [1, 2] 是“唯一”值。也许我在这种情况下错误地使用了 unique ,但这是我想要计算的。
我遇到的困难是唯一行的数量会有所不同。如果我使用np.unique,结果广播如下图:
>>> np.unique(a, axis=1)
array([[[1, 2],
[2, 3]],
[[2, 3],
[3, 4]],
[[1, 2],
[1, 2]]])
我知道我可以遍历每个二维数组并使用np.apply_along_axis,如this answer 中所述。
但是,我正在处理像 (1 000 000, 256, 2) 这样大的数组,所以如果可能的话,我宁愿避免循环。
【问题讨论】:
-
这能回答你的问题吗? Find unique rows in numpy.array(或this answer)
-
我看了一下它们,它们适用于 2D 但不适用于 3D 阵列。我可以进行应用或列表理解并计算二维数组中的唯一行,但我正在尝试找出是否有更快的方法。
-
确实如此。请注意,我不清楚该示例:结果不是不同的唯一行数吗?如果不是,为什么最后一个值为 1?除此之外,最后一个维度是否始终为 2,
a的值是否始终为整数并限制在特定的已知边界范围内? -
它们总是整数,范围在 0 和计数完成时已知的变量之间(通常在 10 到 40 之间)。
-
我还编辑了问题以使其更清晰。
标签: numpy