Numpy Kronecker三角矩阵

2024-06-01 05:06:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想建立一个M乘M矩阵,其中每个单元都是Kronecker delta的函数

下面是使用for循环执行此操作的代码:

# Note: X is an M by M numpy array
def build_matrix(X):
   def kd(i, j):
     if i==j:
         return 1
     else :
         return 0

  m = np.zeros((len(X), len(X)))
  for row in range(len(X)):
      for colom in range(len(X)):
          m[row][colom] = kd(X[row], X[colom])
  return m

有没有更好的Python式的方法来达到这个目的?在


Tags: 函数代码inforlenreturndefrange
2条回答

不确定它是否更“Python”,但稍微短一点的方法是(假设你不想使用np.eye公司如其他人所述):

matrix = np.zeros((M,M))
for i in range(M):
    matrix[i,i] = 1

现在有了一个对象(M乘M矩阵),如果行和列的索引不相等,则返回0;如果不相等,则返回1。在

如果要比较两个向量,那么可以选择使用np.meshgridn向量广播到n x n矩阵。np.meshgrid(x,x)将返回两个矩阵:第一个矩阵的向量堆叠在行中,第二个矩阵在列中。有关详细信息,请参阅docs。在

然后可以将函数定义为:

def kronecker_matrix(x,y):
  kmat = np.meshgrid(x,x)[0] == np.meshgrid(y,y)[1]
  return kmat.astype(np.int)   #kmat is a boolean, with .astype you pass it to an integer, if you like

#example:
kronecker_matrix(np.arange(5), np.arange(5))
>>array([[1, 0, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 1, 0],
       [0, 0, 0, 0, 1]])

相关问题 更多 >