【问题标题】:Compare different sized vectors with different values比较具有不同值的不同大小的向量
【发布时间】:2015-10-20 13:19:01
【问题描述】:

我对使用 Matlab 和编程还很陌生。我有一个带有n 试验的数据集,其中(在这种情况下)m 是相关的。所以我有一个带有相关试验索引的m-by-1 向量(rel)。我有另一个由01 组成的向量(Correct,即n-by-1)。 n 总是大于 m。我需要知道哪些试验(在m-by-1 相关试验中)在n-by-1 向量中有一个1。我试过for-loops 但我总是收到错误'Index exceeds matrix dimensions.'

这是我的代码:

for i=1:length(rel);
    CC=rel(find(Correct==1));
end;

我认为它应该相当简单,但我还不知道如何向 Matlab 解释我想要什么......

谢谢大家的回答。我意识到我的问题并不像我想象的那么清楚(我猜也是一个学习过程......)所以你的建议并不是我所需要的。很抱歉不清楚。

  1. 正确不是逻辑,它确实包含 0 和 1,但它们指的是正确或不正确的答案(我实际上不确定这是否重要,但我想我让你知道了)
  2. rel 是所有试验(所有试验=n 试验)的原始数据的子集,正确是与所有试验(n 试验)的原始向量相同的长度。所以 rel 包含(对我而言)原始数据相关试验的索引,并且以这种方式连接到正确。

我希望这能让我的问题更清楚一点,如果没有,请告诉我!

谢谢!

【问题讨论】:

  • 问题是,如果Correctrel 长,那么行如何相互对应。 rel 的元素是否对应Correct 的第一个m 元素?或者Correct 中是否包含m 1s...?
  • rel 是所有试验(n 次试验)的原始数据的子集,正确是与所有试验(n 次试验)的原始向量相同的长度。所以 rel 包含原始数据的所有相关试验的索引...
  • @JaMara 我的回答有什么问题?

标签: matlab for-loop vector indexing


【解决方案1】:

从您的问题中不太清楚您要做什么,但我想我有一个想法。

你有一个向量n 类似于

>> n = round(rand(1, 10))
n =
     0     1     1     0     0     0     1     0     0     1

m 是这个向量的索引,类似于

>> m = [1 3 7 9];

现在我们使用mn 索引为n(m),这将返回与m 中的元素相对应的n 的值。接下来我们需要检查它们是否与1n(m) == 1 相等,最后我们需要通过索引再次确定m 的哪些值具有n 等于1。综上所述,我们得到了

>> m(n(m) == 1)
ans =
     3     7

要查找返回的m 的索引,您可以使用

>> find(n(m) == 1)
ans =
     2     4

【讨论】:

  • 你说的完全正确,你的答案正是我需要的,对不起!起初我没有看到...是否还有一种方法可以获取值的索引而不是值本身?
  • @JaMara 使用find检查我的答案的结尾。
  • 完美,正是我需要的。谢谢
【解决方案2】:

我假设Correctlogical 类型(即它包含真假而不是0s 和1s)。

您实际上不需要循环(这在您的情况下很清楚,因为您正在循环 i 并且从未在循环中实际使用 i):

m = numel(rel)
CC = rel(Correct(1:m))

您收到该错误的原因是因为Correct 的元素多于rel,因此您试图处理超出rel 末尾的元素。我通过仅考虑Correct 的第一个m 元素来解决上述问题。

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多