python 中的 rpy2 动态时间规整 (dtw) - 窗口不起作用
rpy2 Dynamic Time Warping (dtw) in python - windowing does not work
现已关闭 discussion 展示了如何在 python 中使用 R dtw 包。这有点笨拙,但 R dtw 包很棒,比当前可用的 python dtw 实现更好。不幸的是,当尝试指定 "window.size" 时,像 Sakoe-Chiba 乐队这样的窗口函数不起作用。映射到参数似乎存在问题。注意 ”。”在使用 rpy2 时,in arguments 应该被替换为“_”。但是按照这个惯例,这个论点由于某种原因没有被使用。
import numpy as np
import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
rpy2.robjects.numpy2ri.activate()
# Set up our R namespaces
R = rpy2.robjects.r
DTW = importr('dtw')
# Generate our data
idx = np.linspace(0, 2*np.pi, 100)
template = np.cos(idx)
query = np.sin(idx) + np.array(R.runif(100))/10
# Calculate the alignment vector and corresponding distance
alignment = R.dtw(query, template, keep=True,window_type='sakoechiba',
window_size=5)
>>> RRuntimeError: Error in window.function(row(wm), col(wm), query.size= n, reference.size = m, :
argument "window.size" is missing, with no default
您可以看到错误状态 "window.size" 丢失了,尽管 "window_size" 以 rpy2 方式明确指定。
回答我自己的问题,以防有人遇到同样的问题。问题是参数映射和 R 三点省略号“...”。这可以通过手动指定映射来解决。
from rpy2.robjects.functions import SignatureTranslatedFunction
R.dtw = SignatureTranslatedFunction(R.dtw,
init_prm_translate={'window_size': 'window.size'})
因此在本规范中,window_size 参数被正确使用。
import numpy as np
import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
from rpy2.robjects.functions import SignatureTranslatedFunction
rpy2.robjects.numpy2ri.activate()
# Set up our R namespaces
R = rpy2.robjects.r
DTW = importr('dtw')
R.dtw = SignatureTranslatedFunction(R.dtw,
init_prm_translate={'window_size': 'window.size'})
# Generate our data
idx = np.linspace(0, 2*np.pi, 100)
template = np.cos(idx)
query = np.sin(idx) + np.array(R.runif(100))/10
# Calculate the alignment vector and corresponding distance
alignment = R.dtw(query, template, keep=True,window_type='sakoechiba',
window_size=10)
dist = alignment.rx('distance')[0][0]
print(dist)
>>> 117.348292359
未来的注意事项:这个问题现在已被 feature-equivalent dtw-python
package (also found on PyPI) 取代。不再需要 rpy2-R-dtw 网桥。
现已关闭 discussion 展示了如何在 python 中使用 R dtw 包。这有点笨拙,但 R dtw 包很棒,比当前可用的 python dtw 实现更好。不幸的是,当尝试指定 "window.size" 时,像 Sakoe-Chiba 乐队这样的窗口函数不起作用。映射到参数似乎存在问题。注意 ”。”在使用 rpy2 时,in arguments 应该被替换为“_”。但是按照这个惯例,这个论点由于某种原因没有被使用。
import numpy as np
import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
rpy2.robjects.numpy2ri.activate()
# Set up our R namespaces
R = rpy2.robjects.r
DTW = importr('dtw')
# Generate our data
idx = np.linspace(0, 2*np.pi, 100)
template = np.cos(idx)
query = np.sin(idx) + np.array(R.runif(100))/10
# Calculate the alignment vector and corresponding distance
alignment = R.dtw(query, template, keep=True,window_type='sakoechiba',
window_size=5)
>>> RRuntimeError: Error in window.function(row(wm), col(wm), query.size= n, reference.size = m, :
argument "window.size" is missing, with no default
您可以看到错误状态 "window.size" 丢失了,尽管 "window_size" 以 rpy2 方式明确指定。
回答我自己的问题,以防有人遇到同样的问题。问题是参数映射和 R 三点省略号“...”。这可以通过手动指定映射来解决。
from rpy2.robjects.functions import SignatureTranslatedFunction
R.dtw = SignatureTranslatedFunction(R.dtw,
init_prm_translate={'window_size': 'window.size'})
因此在本规范中,window_size 参数被正确使用。
import numpy as np
import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
from rpy2.robjects.functions import SignatureTranslatedFunction
rpy2.robjects.numpy2ri.activate()
# Set up our R namespaces
R = rpy2.robjects.r
DTW = importr('dtw')
R.dtw = SignatureTranslatedFunction(R.dtw,
init_prm_translate={'window_size': 'window.size'})
# Generate our data
idx = np.linspace(0, 2*np.pi, 100)
template = np.cos(idx)
query = np.sin(idx) + np.array(R.runif(100))/10
# Calculate the alignment vector and corresponding distance
alignment = R.dtw(query, template, keep=True,window_type='sakoechiba',
window_size=10)
dist = alignment.rx('distance')[0][0]
print(dist)
>>> 117.348292359
未来的注意事项:这个问题现在已被 feature-equivalent dtw-python
package (also found on PyPI) 取代。不再需要 rpy2-R-dtw 网桥。