Mik*_*awk 7 python arrays numpy
有没有一种方便的方法来初始化根据Kronecker delta定义的Numpy数组?在一个理想的世界中,会有一个叫做kron_delta的函数,这样如果我设置M = kron_delta('ij,kl',5),那么M将是一个5x5x5x5数组,其中M [i,j,k,l每当i = j且k = 1时,则= 1,否则为0.我的问题是是否存在像kron_delta这样的函数.
后续:如果没有,是否还有一种方便的方法来初始化数组delta(ijk)(即,只要所有索引相等,nxnxn数组为1,否则为0)?
使用 numpy 的einsum的替代解决方案:
n = 5
M = np.einsum('ij,kl->ijkl', np.eye(n,n), np.eye(n,n))
Run Code Online (Sandbox Code Playgroud)
你的具体例子可以像这样完成
import numpy as np
n = 3
i,k = np.ogrid[:n, :n]
res = np.zeros((n,n,n,n), int)
res[i,i,k,k] = 1
res
array([[[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]],
[[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]],
[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]],
[[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]],
[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]]])
Run Code Online (Sandbox Code Playgroud)
以及后续:
res3 = np.zeros((3,3,3),int)
i = np.arange(n)
res3[i,i,i] = 1
res3
array([[[1, 0, 0],
[0, 0, 0],
[0, 0, 0]],
[[0, 0, 0],
[0, 1, 0],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 1]]])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5281 次 |
最近记录: |