【问题标题】:Get the eigen vector correspoinding to the ith largest eigen value获取第i个最大特征值对应的特征向量
【发布时间】:2014-04-05 15:35:30
【问题描述】:

我已经为我的作业尝试了这段代码,但我收到了类型错误

??? Subscript indices must either be real positive integers or logicals.

这是我的代码:

for i = 5:200
    eigvecm = eigvecm(:, end:-1:end-(int8(i)-1));
end

请指出如何完成这项工作?

【问题讨论】:

  • 哇!你在干嘛?使用“i”作为迭代器,然后在循环本身中更改“eigvecm”,然后使用“end”作为索引。
  • in eigvecm=eigvecm(:,end:-1:end-(int8(i)-1))你想在这里做什么?
  • 我正在尝试从 eigvecm 矩阵中获取最大的 'i' 列,如果我使用 5 等数字,它可以正常工作,但是当我使用 'i' 作为变量时它不起作用。跨度>
  • 这里到底发生了什么,它会给出与第 i 个最大特征值相对应的第 i 个特征向量。
  • 另请参阅this question 以获取处理此错误的generic approach

标签: matlab for-loop pca eigenvector eigenvalue


【解决方案1】:

听起来很像end-(int8(i)-1) 最终达到零或更低。收到错误时检查 i 的值是多少,并将其与 eigvecm 的列数进行比较。

顺便说一句,如果你想要与第 i 个最大特征值对应的特征向量怎么办:

[vec, val] = eig(M);
[~, ind] = sort(diag(val), 'descend');

ind(i) 是第 i 个最大特征值的列号。所以要找到对应的特征向量:

vec_i = vec(:, ind(i));

【讨论】:

  • 感谢您的精彩回答,我明白了。
  • @cybertrone 那么出了什么问题呢? i 的列数是否大于 eigvecm 的列数?
  • 是的,你是对的,我正在将此代码应用于 pca。
  • 你可以考虑使用SVD函数来做PCA。奇异值通常按从大到小排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
相关资源
最近更新 更多