MATLAB 向量、角度、绘图

标签 matlab vector plot angle

对于模棱两可的标题,我深表歉意,但我不完全确定如何表达这个标题。所以请耐心等待。

我有一个数据矩阵。每列和每行代表一个特定的向量(第1列=第1行,第2列=第2行,等等),每个单元格的值是对应向量之间的余弦相似度。所以矩阵中的每个值都是余弦。

我想用它做几件事。首先,我想创建一个显示其上所有矢量的图形。我知道每个向量之间夹角的余弦值,也知道每个向量的大小,但这是我仅有的信息——有没有我可以实现的算法,它会遍历所有不同的成对角度并显示它以图形方式?也就是说,我不知道所有向量之间的相互关系,而且有太多数据点无法手动完成(例如,如果我只有三个向量,并且它们之间的角度均为 45、12 , 而 72 度是微不足道的)。那么我该怎么做呢?我什至不知道我需要什么样的数学函数才能做到这一点。 (我有 83 个向量,所以有数千个余弦值)。所以基本上这个图(它可以是二维的也可以是多维的,老实说我想两者都做)会显示所有的向量以及它们在空间中如何相互关联(所以我可以比较角度和相对大小) .

我想做的另一件事更简单,但我很难弄明白。我可以将余弦值转换为笛卡尔坐标并将它们显示在散点图中。有没有办法将散点图的每个点连接到图中的 (0,0)?

最后,在试图弄清楚如何自己完成上述某些操作时,我遇到了一些不一致的地方。我计算了 83 个向量中每个向量的平均角度和笛卡尔坐标。这个的数学很简单,我已经检查并仔细检查了它。然而,当我尝试绘制它时,不同的绘制方法给我带来了截然不同的东西。因此,如果我将笛卡尔坐标绘制为散点图,我会得到:

enter image description here

如果我在罗盘图中绘制平均角度,我会得到:

enter image description here

如果我使用颤抖图,我会得到类似这样的结果(我通过将原点向上和向右移动一点来改变它,以便您可以更好地看到它):

enter image description here

我做错了什么,还是我误解了我正在使用的绘图功能?因为这些结果看起来都很不一致。罗盘图上的平均角度都小于 30 度左右,但在箭袋图上,有些似乎超过 90 度,而在散点图上,它们也延伸到 30 度以上。这是怎么回事?

(这是我的代码:)

cosine = load('LSA.txt');


[rows,columns]=size(cosine);
p = cosine.^2;
pp = bsxfun(@minus, 1, p);
sine = sqrt(pp);
tangent = sine./cosine;


Xx = zeros(rows,1);
Yy = zeros(rows,1);
for i = 1:columns
    x = cosine(:,i);
    y = sine(:,i);
    Xx(i,1) = sum(x) * (1/columns);
    Yy(i,1) = sum(y) * (1/columns);
end

scatter(Xx,Yy);

Rr = zeros(rows,1);
Uu = zeros(rows,1);
for j = 1:rows
    Rr(j,1) = sqrt(Xx(j,1).^2 + Yy(j,1).^2);
    Uu(j,1) = atan2(Xx(j,1),Yy(j,2));
end


%COMPASS PLOT
[theta,rho] = pol2cart(Uu,1);
compass(theta,rho);


%QUIVER PLOT

r = 7;
sx = ones(size(cosine))*2; sy = ones(size(cosine))*2;
pu = r * cosine; 
pv = r * sine;
h = quiver(sx,sy,pu,pv);
set(gca, 'XLim', [1 10], 'YLim', [1 10]);

最佳答案

你完全可以解决这个问题。 dot product计算余弦。这意味着您的矩阵实际上是 M=V'*V 这应该可以通过特征值解决。你说你也有长度。

您唯一的问题 - 作为您的原始矩阵,向量将是 83 维的。不容易绘制 2 或 3 维。我认为您仅使用平均角度就过于简化了。有一些技术称为降维 - 这里是 toolbox .我建议 sammon projection1-cosine 上(因为这将是单位球上点的距离)来计算此类绘图的向量。

关于MATLAB 向量、角度、绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12182512/

相关文章:

javascript - 如何在 uplot 中添加引用线?

matlab - 在数组中查找 n 个最小值

MATLAB 多页 GUI 查询

algorithm - 如何从列中创建对称矩阵?

matlab - 将函数发送到matlab函数

r - 设置默认放大 plotly

algorithm - K-means 分割后如何对对象进行计数

c++ - 谁应该清除通过引用检索的 vector ?

c++ - 将本地 std::vector 分配给 C++ 中的引用

plot - 编译plotshape函数TradingView Pine脚本时出错