Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 创建一个向量,其值对应于一个单独的矩阵_Arrays_Matlab_Matrix - Fatal编程技术网

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

Arrays 创建一个向量,其值对应于一个单独的矩阵,arrays,matlab,matrix,Arrays,Matlab,Matrix,使用MATLAB,我想创建一个新的向量,其中原始向量中的值被另一个矩阵中的相应数字替换 具体来说,我有一个大向量(30000x1),其中每个细胞中的单个值对应于大脑中的位置(范围:0-166)。这些值在一定程度上随机分布在向量上(它们对应于大脑位置)。在运行一个实验之后,我现在想用一个我通过实验计算的值替换这些值的每个实例。这些值存储在相应的矩阵(167 x 2):第一列包含原始矩阵(0-166)中的值,第二列包含我要替换原始值(0-6)的新值。例如,在我的实验中,如果值150与分数5相关,我想

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

具体来说,我有一个大向量
(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);