python - 在 python 中查找大型二维矩阵中的模式的有效方法(Scipy)

标签 python scipy

我正在使用scipy中的stats.mode()来计算800*500矩阵中的众数。执行时间如下:

   `Time taken to execute 0.4359015187888584
    Time taken to execute 0.42199154405135975
    Time taken to execute 0.4250416821138656
    Time taken to execute 0.4100701556064723
    Time taken to execute 0.4371956395342953`

但我需要它:

 Excution time 0.09193338154885265

有什么方法可以提高效率吗?

最佳答案

我不知道为什么scipy.stats.mode这么慢。无论如何,您可以使用 np.bincount 获得更快的结果:

# create random frame
>>> a = np.random.randint(0, 256, (800, 500)).astype(np.int8)
>>> 
# add row offsets to make bincount create separate bins for each row
>>> counts = np.bincount((a.view(np.uint8) + 256 * np.arange(800)[:, None]).ravel(), minlength=256*800).reshape(800, 256)
# find the mode
>>> values = np.argmax(counts, axis=1)
# discard the counts for all other values
>>> counts = counts[np.arange(800), values]
# convert modes back to original dtype
>>> values = values.astype(np.uint8).view(np.int8)

关于python - 在 python 中查找大型二维矩阵中的模式的有效方法(Scipy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51095585/

相关文章:

python - 如何在同一行打印字符串和整数?

python - 在两个图像之间进行插值

python - 如何通过Python PIL创建一个填充半透明颜色的三角形(fork PIL)

python - 初始化大量变量的最简单方法

python - 根据feature_importances_减少特征数量

python - n 维数据的估计经验分布的累积概率

python - SciPy medfilt 错误结果

python - 使用 python 对音频样本应用过滤器

python - 在 python 中使用 scipy 解决有界非线性最小化

javascript - 将 Javascript 值解析为 Django View