pyroscepter
pyroscepter

Reputation: 205

SciPy method eigsh giving nonintuitive results

I tried to use SciPy function linalg.eigsh to calculate a few eigenvalues and eigenvectors of a matrix. However, when I print the calculated eigenvectors, they are of the same dimension as the number of eigenvalues I wanted to calculate. Shouldn't it give me the actual eigenvector, whose dimension is the same as that of the original matrix?

My code for reference:

id = np.eye(13)
val, vec = sp.sparse.linalg.eigsh(id, k = 2)
print(vec[1])

Which gives me:

[-0.26158945  0.63952164]

While intuitively it should have a dimension of 13. And it should not be a non-integer value either. Is it just my misinterpretation of the function? If so, is there any other function in Python that can calculate a few eigenvectors (I don't want the full spectrum) of the wanted dimensionality?

Upvotes: 1

Views: 54

Answers (1)

Warren Weckesser
Warren Weckesser

Reputation: 114781

vec is an array with shape (13, 2).

In [21]: vec
Out[21]: 
array([[ 0.36312724, -0.04921923],
       [-0.26158945,  0.63952164],
       [ 0.41693924,  0.34811192],
       [ 0.30068329, -0.11360339],
       [-0.05388733, -0.3225355 ],
       [ 0.47402124, -0.28180261],
       [ 0.50581823,  0.29527393],
       [ 0.06687073,  0.19762049],
       [ 0.103382  ,  0.29724875],
       [-0.09819873,  0.00949533],
       [ 0.05458907, -0.22466131],
       [ 0.15499849,  0.0621803 ],
       [ 0.01420219,  0.04509334]])

The eigenvectors are stored in the columns of vec. To see the first eigenvector, use vec[:, 0]. When you printed vec[0] (which is equivalent to vec[0, :]), you printed the first row of vec, which is just the first components of the two eigenvectors.

Upvotes: 3

Related Questions