【问题标题】:how can I add a dot product as a distance function in pdist of matlab如何在matlab的pdist中添加点积作为距离函数
【发布时间】:2022-11-15 01:06:17
【问题描述】:

mat_vec=zeros(100,10000);

点积是dot(xi, xj)

distanceFunction = @(xi, xj)dot(xi, xj)
mat_dist=pdist(mat_vec, distanceFunction)

错误信息如

distanceFunction =

  function_handle with value:

    @(xi,xj)dot(xi,xj)

Error using pdist
Error evaluating distance function '@(xi,xj)dot(xi,xj)'.

Error in Task1_lab404_02 (line 45)
mat_dist=pdist(mat_vec, distanceFunction)

Caused by:
    Error using dot
    A and B must be same size.

【问题讨论】:

    标签: matlab


    【解决方案1】:

    来自pdist documentation(强调我的):

    距离函数的形式为

    function D2 = distfun(ZI,ZJ)

    在哪里

    ZI 是一个包含单个观察值的 1-by-n 向量。

    ZJ 是一个包含多个观察值的 m2-by-n 矩阵。该函数必须接受一个矩阵ZJ,其中包含任意数量的观察值.

    所以你需要定义函数矢量化在第二个输入。对于非常简单的点积,使用matrix multiplication

    distanceFunction = @(xi, xj) xi*xj';
    

    implicit expansion

    distanceFunction = @(xi, xj) sum(xi.*conj(xj), 2);
    

    但是请注意,这是不是真正的距离函数,因为对于复杂的输入,distanceFunction(a, b)distanceFunction(b, a) 不同。应用 pdist 只会为每一对给出其中一个结果。

    【讨论】:

    • 我几乎把你链接到你自己的个人资料,但后来我记得数学不是这样的。千钧一发!
    猜你喜欢
    • 2023-03-05
    • 2011-01-29
    • 2012-10-16
    • 2014-08-02
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多