Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
MATLAB需要帮助使用2D索引表(查找表?)_Matlab_Matrix_Lookup Tables - Fatal编程技术网

MATLAB需要帮助使用2D索引表(查找表?)

MATLAB需要帮助使用2D索引表(查找表?),matlab,matrix,lookup-tables,Matlab,Matrix,Lookup Tables,我创建了一个索引表,其中列出了另一个2D矩阵的行索引,程序需要将其取出并进行一些计算 例如,矩阵1是包含数字的3x3 [A,B,C;D,E,F;G,H,I] 矩阵2是另一个矩阵大小5x5 因此,我想使用矩阵1中的信息从矩阵2中取出行,并进行一些计算: i、 e.将矩阵2第1行与矩阵2第A、B和C行的差值相加。 矩阵2的第2行和第D、E、F行 第3行和第G、H、I行 我真的不知道怎么做(除了使用for循环)。我代码中的矩阵非常大(49x111600和111600x25)。对于循环,需要很长时间

我创建了一个索引表,其中列出了另一个2D矩阵的行索引,程序需要将其取出并进行一些计算

例如,矩阵1是包含数字的3x3 [A,B,C;D,E,F;G,H,I]

矩阵2是另一个矩阵大小5x5

因此,我想使用矩阵1中的信息从矩阵2中取出行,并进行一些计算:

i、 e.将矩阵2第1行与矩阵2第A、B和C行的差值相加。 矩阵2的第2行和第D、E、F行 第3行和第G、H、I行

我真的不知道怎么做(除了使用for循环)。我代码中的矩阵非常大(49x111600和111600x25)。对于循环,需要很长时间


添加详细信息:

这正是我想做的:

s=0;

for i = 1: size(matrix1,2)

    for j = 1: size(matrix1,1)

    % using matrix1 as index for rows in matrix 2

        if matrix1(j,i) > 0,

            d = matrix2(i,:)-matrix2(matrix1(j,i),:);

            s(i) = s(i) + sum(d.^2);

        end

    end

end

但是,由于我的数据非常大,使用2个for循环需要很长的时间。

首先,您确定需要将
sum(d.^2)
添加到
s(i)
中,即使在
matrix1(j,i)0)的迭代中没有计算任何内容

  • 然后通过访问
    matrix2
    执行减法,如下所示:

  • d=matrix2(idcs_i(:),:)-matrix2(matrix1((大小(matrix1,1)*(idcs_i(:)-1)+idcs_j(:),:)

  • 现在将它们聚合为如下内容:
  • d=sum(d.^2,2)

    l=长度(idcs_i)

    s=sparse(idcs_i(:),one(l,1),d,size(matrix1,2),1)

    清除idcs\u i idcs\u j l d

    检查上述内容是否完全正确?或者纠正它


    说明:

    在步骤one中,您正在
    matrix1
    中提取要在
    matrix2
    中求和的索引
    (i,j)
    。(现在这个步骤就这么简单。)

    在步骤two中,您正在提取
    matrix2
    中的对应行(将其视为
    idcs_i(k)
    对应于
    matrix1((大小(matrix1,1)*(idcs_i(k)-1)+idcs_j(k))
    其中
    (大小(matrix1,1)*(idcs_i(k)-1)+idcs_j(k))
    是从2-d转换的一维索引位置)


    在第三步中,
    d=sum(d.^2,2)
    正在做你的
    sum(d.^2)
    s=sparse(idcs_i(:),one(l,1),d,size(matrix1,2),1)
    正在做你的
    s(i)=s(i)+*
    。事实上,我只使用了
    sparse(*)
    函数进行求和。而
    s
    很可能最终成为一个完全稠密的向量。(实际上,稀疏函数使用相同的
    (i,j)
    索引累加值。因此,即使使用密集的
    matrix1
    matrix2
    ),这也只是一个技巧)

    首先,您确定需要将
    和(d.^2)
    添加到
    s(i)中吗
    当矩阵1(j,i)0时,即使您在迭代中没有计算任何东西

  • 然后通过访问
    matrix2
    执行减法,如下所示:

  • d=matrix2(idcs_i(:),:)-matrix2(matrix1((大小(matrix1,1)*(idcs_i(:)-1)+idcs_j(:),:)

  • 现在将它们聚合为如下内容:
  • d=sum(d.^2,2)

    l=长度(idcs_i)

    s=sparse(idcs_i(:),one(l,1),d,size(matrix1,2),1)

    清除idcs\u i idcs\u j l d

    检查上述内容是否完全正确?或者纠正它


    说明:

    在步骤one中,您正在
    matrix1
    中提取要在
    matrix2
    中求和的索引
    (i,j)
    。(现在这个步骤就这么简单。)

    在步骤two中,您正在提取
    matrix2
    中的对应行(将其视为
    idcs_i(k)
    对应于
    matrix1((大小(matrix1,1)*(idcs_i(k)-1)+idcs_j(k))
    其中
    (大小(matrix1,1)*(idcs_i(k)-1)+idcs_j(k))
    是从2-d转换的一维索引位置)


    在第三步中,
    d=sum(d.^2,2)
    正在做你的
    sum(d.^2)
    s=sparse(idcs_i(:),one(l,1),d,size(matrix1,2),1)
    正在做你的
    s(i)=s(i)+*
    。事实上,我只使用了
    sparse(*)
    函数进行求和。而
    s
    很可能最终成为一个完全稠密的向量。(实际上,稀疏函数使用相同的
    (i,j)
    索引累加值。因此,即使使用密集
    matrix1
    matrix2
    也只是一个技巧)

    你说求矩阵2第1行的差的和,这只是一个数字吗?你想把它加到矩阵1第1行的每个元素上吗?您需要非常具体地说明您希望执行的操作。您的意思是使用
    MATRIX2(1,:)
    MATRIX2(MATRIX1(1,:),:)
    ?你能给我们举个例子吗?你可以在矩阵之间做数学运算,。例如:
    Something=Matrix1(1,:)+Matrix2(5,:)
    在执行此类操作时,请注意需要具有相同大小的矩阵。。。明确您需要做什么,我们可以进一步帮助您。(ninjaed by@biker)谢谢。我只是补充了我想做的更多细节。我觉得应该有一种方法来避免循环,但不确定如何…用
    matrix1
    中每行索引的计算覆盖
    diff(I,:)
    。你的意思是创建一个3d矩阵吗?(另外,创建一个与内置函数同名的变量是一个可怕的想法。)你说要对矩阵2第1行的差求和,这只是一个数字吗?你想把它加到矩阵1第1行的每个元素上吗?您需要非常具体地说明您希望执行的操作。您的意思是使用
    MATRIX2(1,:)
    MATRIX2(MATRIX1(1,:),:)
    ?你能给我们举个例子吗?你可以在矩阵之间做数学运算,。例如:
    Something=Matrix1(1,:)+Matrix2(5,:)
    小心你需要的