【问题标题】:Create a vector with values corresponding to a separate matrix创建一个向量,其值对应于一个单独的矩阵
【发布时间】:2014-12-04 20:51:13
【问题描述】:

使用 MATLAB,我想创建一个新向量,其中原始向量中的值被另一个矩阵中的相应数字替换。

具体来说,我有一个大向量(30,000 x 1),其中每个单元格中的各个值对应于大脑中的位置(range: 0 - 166)。这些值在向量中有些随机分布(它们对应于大脑位置)。运行实验后,我现在想用我通过实验计算的值替换这些值的每个实例。这些值存储在相应的矩阵(167 x 2) 中:第一列包含来自原始矩阵(0 - 166) 的值,第二列包含我想替换原始值(0 - 6) 的新值。例如,如果在我的实验中值1505 的分数相关联,我想在原始矩阵中将150 的每个实例替换为5

原始向量:[1; 1; 1; 1; 2; 2; 2; 2; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; ...]

恒等矩阵:[0 0; 1 4; 2 5; 3 2; ...]

新向量:[4; 4; 4; 4; 5; 5; 5; 5; 4; 4; 4; 4; 4; 4; 5; 5; 5; 5; ...]

有没有简单的方法来解决这个问题?

谢谢

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:
    originalMatrix = [1; 1; 1; 1; 2; 2; 2; 2; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 0; 3];
    identityMatrix = [0 0; 1 4; 2 5; 3 2];
    [~,ind] = ismember(originalMatrix,identityMatrix(:,1));
    map = identityMatrix(:,2);
    result = map(ind);
    

    编辑

    我不断收到此错误:“下标索引必须是真正的正整数或逻辑。”

    这是因为originalMatrix中的某些值在identityMatrix中没有对应的值。

    所以你可以忽略它们,

    ind(ind==0) = [];
    

    【讨论】:

    • 谢谢大家!我试过了,但我一直收到这个错误:“下标索引必须是真正的正整数或逻辑。”
    【解决方案2】:
    indCol=identityMatrix(:,2);
    newVector=indCol(originalVector+1)
    

    或者,在一行中:

    newVector=identityMatrix(originalVector+168)
    

    【讨论】:

    • 如果identity matrix 排序后没有缺失值,这将起作用。很好的答案。
    • 他说是 167x2。谢谢:)
    【解决方案3】:

    我很确定有一种更有效的方法,但这应该可以完成工作。 对于 0-166 范围内的每个值,我找到包含该值的原始向量分量的索引。这存储在称为索引的向量中。然后我将名为 identity_matrix(i,2) 的新值放入该索引处的 new_vector 中。

    new_vector = zeros(size(original_vector));
    for i = 1:167
        Indexes = find(original_vector == identity_matrix(i,1));
        new_vector(Indexes) = identity_matrix(i,2);
    end
    

    【讨论】:

      【解决方案4】:

      这是一个使用 bsxfun 和乘法的单行代码(使用来自 Kamtal 答案的数据):

      originalMatrix = [1; 1; 1; 1; 2; 2; 2; 2; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 0; 3];
      identityMatrix = [0 0; 1 4; 2 5; 3 2];
      result = bsxfun(@eq,originalMatrix(:),identityMatrix(:,1)')*identityMatrix(:,2);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        • 2015-08-05
        相关资源
        最近更新 更多