Excel—返回从引用到其中心和半径的矩阵的函数

Excel—返回从引用到其中心和半径的矩阵的函数,excel,matrix,excel-formula,Excel,Matrix,Excel Formula,我正在使用SUMPRODUCT执行一些矩阵运算。我有一个卷积内核,我将应用于我的数据集。 但是,我还有一个定义内核大小的字段 现在,根据我的内核大小,我将有几个卷积内核,我想我可以通过VLOOKUP以某种方式获得它们。然而,这只是我的卷积内核,不是我的数据矩阵 目前,我在卷积结果的单元格I9中编写了SUMPRODUCT(卷积内核!$A$1:$C$3;Data!H8:J10)。我想写一些类似于: SUMPRODUCT(生成矩阵(卷积内核!$B$2;2);生成矩阵(数据!J8;2)) (实际上,我的

我正在使用
SUMPRODUCT
执行一些矩阵运算。我有一个卷积内核,我将应用于我的数据集。 但是,我还有一个定义内核大小的字段

现在,根据我的内核大小,我将有几个卷积内核,我想我可以通过
VLOOKUP
以某种方式获得它们。然而,这只是我的卷积内核,不是我的数据矩阵

目前,我在卷积结果的单元格
I9
中编写了
SUMPRODUCT(卷积内核!$A$1:$C$3;Data!H8:J10)
。我想写一些类似于:

SUMPRODUCT(生成矩阵(卷积内核!$B$2;2);生成矩阵(数据!J8;2))


(实际上,我的
$B$2
这里是
VLOOKUP
东西)
2
是内核大小-
MAKE_矩阵(Xn;1)
应该返回
Xn
单元格,
MAKE_矩阵(Xn,2)
应该返回
X-1n-1:X+1n+1
,等等。

在与ForwardEd讨论之后,我寻找的函数似乎是
OFFSET
,在我的示例中,
SUMPRODUCT(OFFSET(卷积内核!$B$2;-1,-1,3,3);OFFSET(Data!J8;-1,-1,3,3))
函数 这是一个易失性函数。只要您的工作簿中没有处理大量的volatile函数,或者volatile函数在计算中没有处理大量数据,就可以使用它

由5部分组成:

偏移量(A、B、C、D、E)

  • A是偏移函数其余部分的参考点。它不必与调用它的位置在同一工作表上。您只需要输入适合您需要的地址格式
  • B是要从参考点移动的行数。0将使您保持在参考点上。负整数将从参考点向上移动那么多行。正整数将向下移动那么多行
  • C是要使用与上面B相同的方法从参考点移动的列数
  • D是要拉取或使用的行数。0表示您不会提取任何信息。1将仅拉动正在处理的行,2将拉动2行
  • E是您要拉取或使用的列数,其工作方式与上面的D相同
如果在单个单元格中输入偏移量,则即使提取了3x3区域的信息,也会显示第一个元素。但是,您可以在另一个函数计算中使用偏移量替换范围/地址


功能 现在,如果您正在另一张图纸上构建矩阵,如我们前面所述,并且您知道矩阵的最大大小,那么您可以使用以下非易失性函数来使用函数提取矩阵:

=INDEX($B$2:$SS$513,A1,B1)
其中A1是从顶部开始计数的行数,B1是从左侧开始计数的列数。由于您希望拉动方形矩阵,A1=B1,因此可以使用以下公式:

=INDEX($B$2:$SS$513,A1,A1)
$B$2:$SS$513是您将使用的矩阵的最大大小。也可以使用完整的表格参考,但随后您可能会遇到最大单元格计算问题。如果您可以定义可能使用的最大范围,则速度会更快

更新二 下面的示例是一个通用的15X15矩阵,其相对于中心的坐标J9是每个单独的单元值。您会注意到我在B2中转储了要返回的方阵的大小。然后我使用下面的索引公式来确定左上角和右下角的地址,因为这是定义范围的方式

左上角 右下角

现在1:1048576是整张图纸的参考。这可以减少到J9中心点的最大矩阵大小$B$1:$R$17。我使用了完整的表引用,因为您需要处理两个不同大小的矩阵,您需要做的就是为其中一个定义中心点(J9=>newpoint)。如果中心点不变,这将适用于您

现在索引有点有趣,因为它实际上返回一个单元格地址,并显示该单元格地址上的任何内容。同样地,如果您想做SUMPRODUCT(Matrix1,Matrix2),那么假设我的示例矩阵是矩阵1,您可以执行以下操作:

=SUMPRODUCT(INDEX(1:1048576,ROW($J$9)-($B$1-1)/2,COLUMN($J$9)-($B$1-1)/2):INDEX(1:1048576,ROW($J$9)+($B$1-1)/2,COLUMN($J$9)+($B$1-1)/2),Matrix2)
请注意“:”以及如何使用它从上面分离两个索引公式。这与将B1的值设置为7时说的G6:M12相同

如果我理解正确,并且所有矩阵都有一个恒定的中心点,你可以使用上述方法,你需要在B1中提供n值,或者计算n以满足你的需要


注意:为了使矩阵有一个中心,n或B2中的值必须是奇数整数

只是检查一下,你知道矩阵函数,比如mmmultiply吗?还有其他的。我想你会想知道的,因为SUMPRODUCT不是真正的矩阵运算。excel公式只能在应用它的单元格中生成结果。即,如果单元格B2中的I enter=A1+B1,结果将仅显示在B2中,而不显示周围区域。如果将数组公式应用于某个区域,则该数组公式将对该区域中的所有单元格应用相同的公式。要将公式应用于动态单元格范围,您需要使用VBA。我知道MMULT,谢天谢地,我将平方矩阵相乘(如卷积),因此结果应该无关紧要。如果MMULT更好,我会很高兴地切换到它-但到目前为止,它们都产生相同的结果。@我不想将我的公式应用于动态范围的单元格-我只想将其应用于A1:Z26中的单元格。不过,我希望公式是动态的。你知道你将要处理的矩阵的最大大小吗?@fzd看看索引opt
=INDEX(1:1048576,ROW($J$9)+($B$1-1)/2,COLUMN($J$9)+($B$1-1)/2)
=SUMPRODUCT(INDEX(1:1048576,ROW($J$9)-($B$1-1)/2,COLUMN($J$9)-($B$1-1)/2):INDEX(1:1048576,ROW($J$9)+($B$1-1)/2,COLUMN($J$9)+($B$1-1)/2),Matrix2)