我正在linalg.eigsh
,here的文档编制页面上使用示例代码:
import scipy.sparse.linalg as sp
import numpy as np
id = np.eye(13)
vals, vecs = sp.eigsh(id, k=6)
len(vals)
# 6
len(vecs)
# 13
我要求它提供6
个特征值(k=6
),但它确实返回6,但是它给了我13个(即 all )特征向量。
在文档中,当谈到k
时,它说:
所需的特征值和特征向量的数量。 k必须更小 比N还要大。不可能计算矩阵的所有特征向量。
实际上,我认为eighsh
底层的Lanczos方法的速度是由于它只发现了eigvector的一个子集。
那么如何返回所有特征向量?
答案 0 :(得分:1)
不是; vecs是13 x 6的矩阵。特征向量n为:
import datetime
# Example from your comment:
type1 = "some type"
main_list = [[], [],
[[1, 2, 3, datetime.date(2016, 8, 18), type1],
[3, 4, 5, datetime.date(2016, 8, 18), type1]], [], []]
def fmt_times(lst):
"""Format the fourth value of each element of each non-empty sublist"""
for i in range(len(lst)):
if lst[i] != []:
for j in range(len(lst[i])):
lst[i][j][3] = lst[i][j][3].strftime('%Y-%m-%d')
return lst
def fmt_times_one_line(main_list):
"""Format the fourth value of each element of each non-empty sublist"""
return [[] if main_list[i] == [] else [[main_list[i][j][k] if k != 3 else main_list[i][j][k].strftime('%Y-%m-%d') for k in range(len(main_list[i][j]))] for j in range(len(main_list[i])) ] for i in range(len(main_list))]
import copy
# Deep copy needed because fmt_times modifies the sublists.
assert fmt_times(copy.deepcopy(main_list)) == fmt_times_one_line(main_list)
答案 1 :(得分:0)
您误解了结果。特征向量是vecs
的列,但是您要对行进行计数。 vecs
共有六列。