[Numpy-discussion] Behaviour of vdot(array2d, array1d)
Nikolas Tezak
Nikolas.Tezak@gmx...
Thu Jan 7 11:51:44 CST 2010
Hi,
I am new to this list, but I have been using scipy for a couple of
months now with great satisfaction.
Currently I have a problem:
I diagonalize a hermitian complex matrix using the eigh routine from
scipy.linalg (this is still a numpy question, see below)
This returns the eigenvectors as columns of a 2d array.
Now I would like to project a vector onto this new basis.
I could either do:
inital_state = array(...) #dtype=complex, shape=(dim,)
coefficients = zeros( shape=(dim,), dtype=complex)
matrix = array(...) #dtype=complex, shape=(dim, dim)
eigenvalues, eigenvectors = eigh(matrix)
for i in xrange(dim):
coefficients[i] = vdot(eigenvalues[:, i], initial_state)
But it seems to me after reading the documentation for vdot, that it
should also be possible to do this without a loop:
initial_state = array(...) #dtype=complex, shape=(dim,)
matrix = array(...) #dtype=complex, shape=(dim, dim)
eigenvalues, eigenvectors = eigh(matrix)
coefficients = vdot( eigenvalues.transpose(), initial_state)
However when I do this, vdot raises a ValueError complaining that the
"vectors have different lengths".
It seems that vdot (as opposed to dot) cannot handle arguments with
different shape although the documentation suggests otherwise.
I am using numpy version 1.3.0. Is this a bug or am I missing something?
Regards,
Nikolas
More information about the NumPy-Discussion
mailing list