【发布时间】:2018-04-18 05:08:47
【问题描述】:
如何在给定的轴上获取 numpy 数组中每个元素的出现次数的元素计数?通过“元素方式”,我的意思是数组的每个值都应该转换为它出现的次数。
简单的二维输入:
[[1, 1, 1],
[2, 2, 2],
[3, 4, 5]]
应该输出:
[[3, 3, 3],
[3, 3, 3],
[1, 1, 1]]
解决方案还需要相对于给定轴工作。例如,如果我的输入数组a 的形状为(4, 2, 3, 3),我认为它是“由 3x3 矩阵组成的 4x2 矩阵”,运行solution(a) 应该会输出上述形式的(4, 2, 3, 3) 解决方案,其中每个@ 987654328@ "submatrix" 包含相对于该子矩阵的相应元素的计数,而不是整个 numpy 数组。
更复杂的示例:假设我将上面的示例输入 a 并调用 skimage.util.shape.view_as_windows(a, (2, 2))。这给了我形状为(2, 2, 2, 2) 的数组b:
[[[[1 1]
[2 2]]
[[1 1]
[2 2]]]
[[[2 2]
[3 4]]
[[2 2]
[4 5]]]]
那么solution(b)应该输出:
[[[[2 2]
[2 2]]
[[2 2]
[2 2]]]
[[[2 2]
[1 1]]
[[2 2]
[1 1]]]]
因此,即使值 1 在 a 中出现 3 次,在 b 中出现 4 次,但它在每个 2x2 窗口中仅出现两次。
【问题讨论】:
-
详细说明 -
element-wise count along axis of values in numpy array?你到底在数什么? -
@Divakar 我想计算每个元素的出现次数。我将编辑问题以使其更清楚。与the question相关的你昨天聪明地回答了。
-
@CurtF。沿着相关轴循环并使用常规 python 循环构造一个新数组相当简单,但太慢了。我研究过使用
np.histogram和np.bincount,但它们似乎都不适合这项任务,因为它们需要扁平数组。