【发布时间】:2017-04-25 17:20:24
【问题描述】:
我一直在努力解决对一维 numpy 数组中的k 相邻元素施加不等式阈值的任务——我应该在左侧和右侧都添加。例如:
if x[i+-100] < .05:
这是我能表达的最好的,显然它不起作用。但我希望我的观点更清楚。换句话说,我想辨别元素 x 的正负 100 个元素内是否有任何元素的值大于 0.05。这是我的整个上下文功能:(这里我也有 -.05)
def vector_recode(x):
if (x[i+-100]) > .05 or (x[i+-100]) < -.05:
return X
else:
return 0
recode_function = np.vectorize(vector_recode)
--为了清楚起见,上面的函数试图获取足够接近零的值并将它们刷新为零,或者如果附近有任何 [+-100] 元素的值高于 0.05 in绝对条件,保持 x 不变。
我有一种下沉的感觉,我可能不得不求助于循环,但 np 的效率总是让我感到惊讶,我希望有人有洞察力,可以帮助像我这样处理k相邻的其他人元素。
我对此过程的其他研究涉及scipy.ndimage 和卷积矩阵。但是我不认为这种方法很容易适用于我的情况——这只是一维左右相邻元素。虽然我以前错了。非常感谢任何帮助。
如果有帮助,我会尝试做一个可行的例子:
>>>A
[0.04,0.03,0.03,0.02,0.04]
>>>recode_function(A)
[0,0,0,0,0]
>>>B
[0.03,0.02,0.23,0.01,0.03]
>>>recode_function(B)
[0.03,0.02,0.23,0.01,0.03]
这里让我们说它的正负 5 不是正负 100。在数组“A”中没有大于 .05 或小于 -.05 的值,因此 x 及其相邻元素将设置为零在向量化函数中。而在数组“B”中有一个大于 0.05 的元素。它是 0.23,因此这意味着该函数将保留 x 以及 x 的正负 5 个相邻元素。正如有人正确指出的那样,可能需要仔细处理边界元素。您可以将“A”和“B”想象为两个不同的数组或 1 个更大数组的分区。我不确定分区是否可行,但我对任何事情都持开放态度。希望这能让你更容易理解。
【问题讨论】:
-
边界元素左边或右边没有100个元素怎么办?
-
另外,如果是
x[i+-100]) > .05,不也保证(x[i+-100]) > -.05吗? -
很好的观察结果,我弄乱了不等号,让我解决这个问题。我想如果元素与值相邻并且在 100 个元素内,则可以处理边界元素,尽管我不确定在这种情况下 python 是否也会抛出越界错误。感谢您的意见。
-
我的函数有点混乱,我把它写反了,抱歉。它现在是正确的形式。我对边界元素的另一个想法是从
[:x]对数组进行分区。 -
是的,我确实想要一个
or,谢谢。我也会尝试添加一个小例子。谢谢。
标签: python python-3.x numpy