【发布时间】:2018-05-14 20:23:05
【问题描述】:
我有一个数组A,比如说:
import numpy as np
A = np.array([1,2,3,4,5,6,7,8])
我希望通过将A 中的每个元素替换为其四个最近邻居的中值来创建一个新数组B,不考虑给定位置的值.. . 例如:
B[2] = np.median([A[0], A[1], A[3], A[4]]) (=3)
问题是我需要在巨大的A 上执行此操作,并且我想优化时间,所以我想避免 for 循环或类似的情况。而且...我不在乎边缘的结果。
我已经尝试过scipy.ndimage.filters.median_filter,但它没有产生所需的输出:
import scipy.ndimage
B = scipy.ndimage.filters.median_filter(A,footprint=[1,1,0,1,1],mode='wrap')
产生B=[7,4,4,5,6,7,6,6],这显然不是正确的答案。
欢迎任何想法。
【问题讨论】:
-
你如何计算最近的 4 个邻居?价值观是否不同?这是一个相当简单的问题,可以在
O(n lg n)中完成 -
听起来像一个内核操作:docs.scipy.org/doc/scipy-0.14.0/reference/generated/… - 或者你想在图像上进行傅立叶变换/乘法/反向傅立叶之后/之后做的事情
标签: python numpy vectorization median