I think I've answered my own question - I remembered tensordot, and the following seems to work:
def transform(tx_matrix, psi1, psi2): psi = np.tensordot(tx_matrix, np.concatenate((psi1[newaxis],psi2[newaxis])),axes=1)) return psi[0], psi[1] sorry for the noise, Gary Gary Ruben wrote: > I'm trying to work out how to apply a 2x2 transform matrix to a spinor, e.g. > > [psi1'] [a b][psi1] > [ ] = [ ][ ] > [psi2'] [c d][psi2] > > where [[a,b],[c,d]] is a transform matrix and psi1 and psi2 are > i x j x k complex arrays representing complex scalar field data. I > worked that one way to do it with 2D fields (psi1 and psi2 being 2D, > i x j arrays) is > > def transform(tx_matrix, psi1, psi2): > psi = np.dot(tx_matrix, np.rollaxis(np.dstack((psi1,psi2)),2,1)) > return psi[0], psi[1] > > or, equivalently > > def transform(tx_matrix, psi1, psi2): > psi = np.dot(tx_matrix, np.rollaxis( > np.concatenate((psi1[newaxis],psi2[newaxis])),1)) > return psi[0], psi[1] > > but, as seems usual for me, I'm confused with trying to extend this to > the next higher dimension; 3D in this case. It seems to me that there > might be a neater way to do this, i.e. some built-in feature of an > existing numpy function. How do I extend this for 3D psi1 and psi2 > arrays? Are there any general tips or guides for helping to minimise > confusion when it comes to manipulating axes like this, such as standard > ways to extend 2D recipes to 3D? > > Gary R. > _______________________________________________ > Numpy-discussion mailing list > Numpy-discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion