matlab - 在 Matlab 中使用函数句柄

标签 matlab function handler

我想使用 knnimpute 来填充数据集中的一些缺失值。问题是,我想使用我自己的距离函数,而不是典型的距离函数(欧几里得距离函数、曼哈顿距离函数......)。

据我所知,knnimpute 允许我使用函数句柄,根据 Heterogeneous Euclidean-Overlap Metric (HEOM) 计算距离

我已将此函数实现为常规函数,但不是句柄函数。因此,我无法使用“正常”函数中的距离矩阵,因为这必须在 knnimpute 内部完成,不知何故,作为处理程序...

我很困惑,有人可以帮助我理解我需要做什么吗?

最佳答案

只要您的距离函数实现具有与标准距离函数相同的签名,那么您应该能够轻松地传入您的函数。

knnimpute 文档 ( matlab knnimpute ) 中,它指出您可以传递“使用 @ 指定的距离函数的句柄,例如 @distfun。然后,它会将读者引向 pdist 函数,该函数提供有关自定义距离函数的更多详细信息 ( matlab pdist ):

使用@指定的距离函数: D = pdist(X,@distfun) 距离函数必须具有以下形式 d2 = distfun(XI,XJ) 以 1×n 向量 XI(对应于 X 的单行)和 m2×n 矩阵 XJ(对应于 X 的多行)作为参数。distfun 必须接受具有任意行数的矩阵 XJ。 distfun 必须返回距离 d2 的 m2×1 向量,其第 k 个元素是 XI 和 XJ(k,:) 之间的距离。

因此,只要 *.m 文件中定义的距离函数与此签名匹配并且可以支持这些输入,那么就不会有任何问题。

假设您的距离函数位于mydistFunc.m文件中,并且其签名符合上述要求,那么您需要做的就是:

% call knnimpute with the data and your function
knnimpute(inputData,'Distance',@mydistFunc);

关于matlab - 在 Matlab 中使用函数句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23433787/

相关文章:

java - 我的 Android 应用程序崩溃了

java - 在 Android 应用程序中使用处理程序的 ProgressBar 倒计时

java.lang.RuntimeException : Can't create handler inside thread that has not called Looper. 准备()

image - 如何使具有透明度的 png 在 MatLab 中显示为透明?

python - 为什么我的函数在调用时不会激活?

Matlab 给出了错误的答案

python - join() 将当前字符串合并到下一个迭代字符串 :(?

javascript - 滚动功能未在我想要的位置触发

matlab - 如何从函数句柄中获取函数子集,函数句柄是 Matlab 中的函数向量

matlab - 选择正确的基本矩阵