创建一个向量,其值对应于单独的矩阵

时间:2014-12-04 20:51:13

标签: arrays matlab matrix

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

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

答案 0 :(得分:5)

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) = [];

答案 1 :(得分:2)

indCol=identityMatrix(:,2);
newVector=indCol(originalVector+1)

或者,在一行中:

newVector=identityMatrix(originalVector+168)

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

以下是使用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);