在numpy中高效地创建数组

3

我正在尝试创建一个三维数组T,使用numpy定义如下:

T_{i, j, k} = \delta_{i, k} - \delta{j, k}

其中\delta_{i, j}是Kronecker delta函数(当i=j时为1,否则为0)。我想知道使用numpy最有效的方法是什么。我可以使用for循环创建两个三维数组并将它们相减。但我怀疑有一种更快速和更符合习惯的方法。任何帮助将不胜感激。

1个回答

6

在numpy中,delta的等效符号是eye:

delta = numpy.eye(5)
T = delta[:,None,:] - delta[None,:,:]
None在numpy中创建了一个‹虚拟›维度(不占用任何额外的内存),用于广播。

太棒了!只是为了更好地理解这个问题。假设我只想创建一个三维数组X,其中X_{i, j, k} = X_{i, k}对于所有的j。上述中的第一项似乎并没有实现这个目标,因为第一维必须有长度。我该怎么做呢? - stableMatch
@gzc 是的,我认为这里有个错别字。我们想要的是 delta[:, None, :] - delta[None, :, :]。 - stableMatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接