对于数据分析任务,我想在一个numpy数组中找到零交叉,该数组来自先与sobel式内核然后是墨西哥帽内核的卷积。零交叉使我能够检测数据的边缘。
不幸的是,数据有些嘈杂,20在下面的示例中,我只想找到具有最小跳转大小的零交叉点:
import numpy as np
arr = np.array([12, 15, 9, 8, -1, 1, -12, -10, 10])
Run Code Online (Sandbox Code Playgroud)
应该导致
>>>array([1, 3, 7])
Run Code Online (Sandbox Code Playgroud)
要么
>>>array([3, 7])
Run Code Online (Sandbox Code Playgroud)
3的索引在哪里-1,就在第一跳的中间之前,7是的索引-10
我尝试了以下代码的修改(来源:有效地检测python中的符号变化)
zero_crossings = np.where(np.diff(np.sign(np.trunc(arr/10))))[0]
Run Code Online (Sandbox Code Playgroud)
正确地忽略了小的跳跃,但是将零交叉点置于 [1,5,7]
什么是有效的方法?
最小跳跃的定义并不严格,但结果应符合我的问题。
编辑:澄清
arr = np.array([12, 15, 9, 8, -1, 1, -12, -10, 10])
arr_floored = np.trunc(arr/10)
>>>>np.array([10, 10, 0, 0, 0, 0, -10, -10, 10])
sgn = np.sign(arr_floored)
>>>>array([ 1, 1, 0, 0, 0, 0, -1, -1, 1]) …Run Code Online (Sandbox Code Playgroud) 给定 sklearn tranformer t,有没有办法确定是否t更改任何给定输入数据集的列/列顺序X,而不将其应用于数据?
例如,和t = sklearn.preprocessing.StandardScaler的列之间存在一对一的映射,即,而 的情况显然不是这样。Xt.transform(X)X[:, i] -> t.transform(X)[:, i]sklearn.decomposition.PCA
其推论是:我们能否知道,通过应用 ,输入的列将如何改变t,例如已经安装的选择了哪些列sklearn.feature_selection.SelectKBest。
我不是在寻找针对特定变压器的解决方案,而是在寻找适用于所有或至少多种变压器的解决方案。
如果需要,请随意实现您自己的 Pipeline 类或包装器。
目前我有这样的数据:
EXAMPLE_DATA = [
['time', 'age', 'height', 'width', 'ethnicity', 'religion'],
['18:42:11', '61', '153.9615', '0.8', 'Mixed', 'None'],
['18:35:00', '34', '116.4253333', '10.17', 'Mixed', 'None'],
['14:25:40', '14', '119.7673475', '65.44', 'Mixed', 'None'],
['19:39:06', '33', '145.2423535', '9.4', 'Mixed', 'None'],
['17:22:17', '66', '122.2351111', '12.4', 'Mixed', 'None'],
['13:15:00', '77', '187.4983398', '19.88', 'Mixed', 'None']
]
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
headings = ['Time', 'Age', 'Height', 'Width', 'Ethnicity', 'Religion']
rows = [0, 1, 2, 3, 4, 5]
for heading, row in zip(headings, rows):
print(heading + ': ' + datafunc[row])
Run Code Online (Sandbox Code Playgroud)
'datafunc'调用EXAMPLE_DATA [1]或EXAMPLE_DATA [2]或([3],[4]等),具体取决于我希望它输出哪一行数据.如果它调用EXAMPLE_DATA [1],这是我得到的输出: …