1

我不知道该怎么说

但我有一份清单

l = ['a','b','c','d','e']  

这是排序和索引所以如果我做 l[0] => 'a'

np.eye(5)用来得到对角线 1

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.]])

但我的目标是得到类似..

array([[ a., 0., 0., 0., 0.], 
[ 0., b., 0., 0., 0.], 
[ 0., 0., c., 0., 0.], 
[ 0., 0., 0., d., 0.], 
[ 0., 0., 0., 0., e.]])

=============更新====================

np 这里是 numpy 库,对不起

将 numpy 导入为 np

4

2 回答 2

3

所以你想从一个向量中创建一个对角线数组,对吧?那是diag

>>> l = ['a','b','c','d','e']  
>>> np.diag(l)
array([['a', '', '', '', ''],
       ['', 'b', '', '', ''],
       ['', '', 'c', '', ''],
       ['', '', '', 'd', ''],
       ['', '', '', '', 'e']],
      dtype='|S1')

或者,如果这些是变量而不是字符串:

>>> a, b, c, d, e = 1., 2., 3., 4., 5.
>>> l = [a, b, c, d, e]
>>> np.diag(l)
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  2.,  0.,  0.,  0.],
       [ 0.,  0.,  3.,  0.,  0.],
       [ 0.,  0.,  0.,  4.,  0.],
       [ 0.,  0.,  0.,  0.,  5.]])
于 2013-10-18T00:11:29.177 回答
1

根据@abarnert 问题的答案,您可能会考虑使用SymPy

>>> from sympy import Symbol
>>> np.diag([Symbol(x) for x in ['a','b','c','d','e']])
array([[a, 0, 0, 0, 0],
       [0, b, 0, 0, 0],
       [0, 0, c, 0, 0],
       [0, 0, 0, d, 0],
       [0, 0, 0, 0, e]], dtype=object)
于 2013-10-18T00:25:34.763 回答