在 Python 中的 ndarray 列表中查找最常见的值
Finding the most common Values in a list of ndarrays in Python
我试图在 ndarray 列表中找到最常见的 ndarray。
我尝试使用 mostCommon() 函数,但出现此错误:TypeError: unhashable type: 'numpy.ndarray
.
关于如何解决这个问题有什么想法吗?
示例列表:
a = [array([1, 2, 3]),array([1, 10,30,2, 3]),array([1, 2, 3])]
我希望它打印最常见的 ndarray:array([1, 2, 3])
Numpy 确实不太适合这种计算,因为它处理 variable-sized 数组(也称为交错数组)。此外,处理此类问题的一般方法是对数组进行排序或使用 hash-table,但不同大小的 Numpy 数组不能进行本地比较,而且它们也不是简单的哈希。
处理此类问题的一个技巧是将数组转换为元组,然后使用字典 对项目进行计数。这是结果代码:
from collections import Counter
a = [np.array([1, 2, 3]), np.array([1, 10,30,2, 3]), np.array([1, 2, 3])]
result = np.asarray(Counter(map(tuple, a)).most_common()[0][0])
# result = array([1, 2, 3])
请注意,这对于大型列表不是很有效,但使用小型 Numpy 数组列表实际上是阻碍计算速度的原因。至少,解决方案很简单。
我试图在 ndarray 列表中找到最常见的 ndarray。
我尝试使用 mostCommon() 函数,但出现此错误:TypeError: unhashable type: 'numpy.ndarray
.
关于如何解决这个问题有什么想法吗?
示例列表:
a = [array([1, 2, 3]),array([1, 10,30,2, 3]),array([1, 2, 3])]
我希望它打印最常见的 ndarray:array([1, 2, 3])
Numpy 确实不太适合这种计算,因为它处理 variable-sized 数组(也称为交错数组)。此外,处理此类问题的一般方法是对数组进行排序或使用 hash-table,但不同大小的 Numpy 数组不能进行本地比较,而且它们也不是简单的哈希。
处理此类问题的一个技巧是将数组转换为元组,然后使用字典 对项目进行计数。这是结果代码:
from collections import Counter
a = [np.array([1, 2, 3]), np.array([1, 10,30,2, 3]), np.array([1, 2, 3])]
result = np.asarray(Counter(map(tuple, a)).most_common()[0][0])
# result = array([1, 2, 3])
请注意,这对于大型列表不是很有效,但使用小型 Numpy 数组列表实际上是阻碍计算速度的原因。至少,解决方案很简单。