如何在单位矩阵的对角元素中插入列表元素?

时间:2017-01-18 17:45:45

标签: python numpy

我有5x5单位矩阵和一个浮点数列表

 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         L=[0.01, 0.02, 0.26, 0.03, 0.68]

我的问题是如何将列表元素放入单位矩阵?

 0.01 0    0    0    0
 0    0.02 0    0    0
 0    0    0.26 0    0
 0    0    0    0.03 0 
 0    0    0    0    0.68 

由于

5 个答案:

答案 0 :(得分:5)

此方法可扩展为写入其他数组的对角线,即>>> a = np.eye(5) >>> L = [0.01, 0.02, 0.26, 0.03, 0.68] >>> d = np.diag_indices_from(a) >>> a[d] = L >>> print(a) [[ 0.01 0. 0. 0. 0. ] [ 0. 0.02 0. 0. 0. ] [ 0. 0. 0.26 0. 0. ] [ 0. 0. 0. 0.03 0. ] [ 0. 0. 0. 0. 0.68]] 不必是单位矩阵:

np.diagonal(a)

另请注意,在numpy版本1.10+上,rewrite /wp-admin$ $scheme://$host$uri/ permanent; location /wp-admin { index index.php index.html index.htm; try_files $uri /wp-admin/index.php?q=$uri&$args; } 实际上将返回可用于修改原始数组的可写视图

答案 1 :(得分:4)

numpy上,这很简单:

L = [0.01, 0.02, 0.26, 0.03, 0.68]
diag_mat = numpy.diag(L)

否则,在vanilla python中,您可以预先分配矩阵并相应地设置元素:

diag_mat = [ 5 * [0] for _ in range(5)]
for index, value in enumerate(L):
    diag_mat[index][index] = value

答案 2 :(得分:3)

您可以使用import numpy as np x = np.eye(5) # create a 5x5 identity matrix L = [0.01, 0.02, 0.26, 0.03, 0.68] x = x * L

#!/bin/bash

ls folder1 >tmp.file

while read line
do
        tar -cf folder2/"$line".tar -C folder1 "$line"
        rm folder1/$line
done < tmp.file

答案 3 :(得分:1)

您可以将L中每个元素的索引与二维矩阵中的对角线索引匹配:

for i, val in enumerate(arr):
    arr[i][i] = val

答案 4 :(得分:0)

我认为有两种简单的方法可以实现这一目标:

您没有指定存储矩阵的方式,所以我假设它是嵌套的形式 [[ligne1],[ligne2]]

将您的示例作为预期输出:

[[0.01, 0, 0, 0, 0], [0, 0.02, 0, 0, 0]]

首先没有numpy:

for in_row in range(len(number_of row)):
    matrix[in_row][in_row] = L[in_row]

有numpy有一个内置函数numpy.diag