【发布时间】:2015-12-11 15:26:59
【问题描述】:
我创建了某种索引表,其中列出了程序需要提取并进行一些计算的另一个二维矩阵的行索引。
例如,MATRIX 1 是一个包含数字的 3x3 [A、B、C; D、E、F; G、H、I]
MATRIX 2 是另一个大小为 5x5 的矩阵
所以,我想使用 MATRIX 1 中的信息从 MATRIX 2 中提取行并进行一些计算:
即将 MATRIX 2 行 #1 与 MATRIX 2 行 #A、B 和 C 的差值相加。 第 2 行与 MATRIX 2 的 D、E、F 行 第 3 行有 G、H、I 行。
我不太确定如何执行此操作(使用 for 循环除外)。我的代码中的矩阵非常大(49x111600 和 111600x25)。而且 for 循环需要很长时间。
添加详细信息:
这几乎就是我想做的事情:
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 循环。
【问题讨论】:
-
你说矩阵2第1行的差求和,那只是一个数字吗?并且您想将其添加到矩阵 1 的第 1 行的每个元素中?您需要非常具体地说明您希望执行的操作。
-
你的意思是对
MATRIX2(1,:)和MATRIX2(MATRIX1(1,:),:)做点什么?能给我们举个例子吗? -
您可以在矩阵之间进行数学运算,。 IE:
Something=Matrix1(1,:)+Matrix2(5,:)注意,在进行此类操作时,您需要拥有相同大小的矩阵...澄清您需要做什么,我们可以为您提供进一步的帮助。 (@beaker 忍者) -
谢谢。我只是添加了更多关于我想做的事情的细节。我觉得应该有办法避免循环,但不确定如何......
-
您正在用
matrix1中每个行索引的计算覆盖diff(i,:)。您的意思是创建一个 3d 矩阵吗? (另外,创建一个与内置函数同名的变量是一个可怕的想法。)
标签: matlab matrix lookup-tables