Arrays 创建一个向量,其值对应于一个单独的矩阵
使用MATLAB,我想创建一个新的向量,其中原始向量中的值被另一个矩阵中的相应数字替换 具体来说,我有一个大向量Arrays 创建一个向量,其值对应于一个单独的矩阵,arrays,matlab,matrix,Arrays,Matlab,Matrix,使用MATLAB,我想创建一个新的向量,其中原始向量中的值被另一个矩阵中的相应数字替换 具体来说,我有一个大向量(30000x1),其中每个细胞中的单个值对应于大脑中的位置(范围:0-166)。这些值在一定程度上随机分布在向量上(它们对应于大脑位置)。在运行一个实验之后,我现在想用一个我通过实验计算的值替换这些值的每个实例。这些值存储在相应的矩阵(167 x 2):第一列包含原始矩阵(0-166)中的值,第二列包含我要替换原始值(0-6)的新值。例如,在我的实验中,如果值150与分数5相关,我想
(30000x1)
,其中每个细胞中的单个值对应于大脑中的位置(范围:0-166)
。这些值在一定程度上随机分布在向量上(它们对应于大脑位置)。在运行一个实验之后,我现在想用一个我通过实验计算的值替换这些值的每个实例。这些值存储在相应的矩阵(167 x 2)
:第一列包含原始矩阵(0-166)
中的值,第二列包含我要替换原始值(0-6)
的新值。例如,在我的实验中,如果值150
与分数5
相关,我想用原始矩阵中的5
替换150
的每个实例
原始向量:[1;1;1;1;2;2;2;1;1;1;1;1;1;2;2;2;2;2;2;…]
身份矩阵:[0;14;25;32;…]
新向量:[4;4;4;4;5;5;5;4;4;4;4;4;4;4;5;5;5;5;5;5;5;…]
有没有简单的方法来解决这个问题
谢谢
编辑
我经常遇到这样的错误:“下标索引必须是实正整数或逻辑数。”
这是因为originalMatrix
中的某些值在identityMatrix
中没有相应的值
所以你可以通过
ind(ind==0) = [];
我很确定有一个更有效的方法,但这应该能完成任务。 对于0-166范围内的每个值,我找到包含该值的原始向量分量的索引。这存储在称为索引的向量中。然后,我将称为单位矩阵(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
或者,在一行中:
newVector=identityMatrix(originalVector+168)
下面是一个使用
bsxfun
和乘法(使用Kamtal答案中的数据)的一行程序:
谢谢大家!我已经尝试过了,但我一直遇到这样的错误:“下标索引必须是实正整数或逻辑数。”如果对
单位矩阵进行排序而不丢失值,这将起作用。回答得好,他说是167x2。谢谢:)
indCol=identityMatrix(:,2);
newVector=indCol(originalVector+1)
newVector=identityMatrix(originalVector+168)
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);