Difference between revisions of "Numpy linalg"
Line 66: | Line 66: | ||
print "einsum dot product over higher dimensions" | print "einsum dot product over higher dimensions" | ||
a3_e = np.einsum('...ij,...jk', a3, a3) | a3_e = np.einsum('...ij,...jk', a3, a3) | ||
+ | print a3_e | ||
+ | |||
+ | # With Ellipsis and axis notation | ||
+ | a = np.arange(4).reshape(2,2) | ||
+ | a = np.arange(4).reshape(2,2) | ||
+ | print "a is" | ||
+ | print a | ||
+ | print "dot a" | ||
+ | print np.dot(a, a) | ||
+ | # Expand one axis in start, and tile up 2 times. | ||
+ | a2 = np.tile(a[None,:], (2, 1, 1)) | ||
+ | print "a2 shape", a2.shape | ||
+ | print "einsum dot product over higher dimensions" | ||
+ | a2_e = np.einsum(a2, [Ellipsis, 0, 1], a2, [Ellipsis, 1, 2]) | ||
+ | print a2_e | ||
+ | |||
+ | # Expand one axis in start, and tile up 2 times. | ||
+ | a3 = np.tile(a2[None,:], (2, 1, 1, 1)) | ||
+ | print "a3 shape", a3.shape | ||
+ | print "einsum dot product over higher dimensions" | ||
+ | a3_e = np.einsum(a3, [Ellipsis, 0, 1], a3, [Ellipsis, 1, 2]) | ||
print a3_e | print a3_e | ||
</source> | </source> |
Revision as of 16:39, 19 June 2014
Contents
How to transpose higher dimension arrays
http://jameshensman.wordpress.com/2010/06/14/multiple-matrix-multiplication-in-numpy/
Faster dot product using BLAS
http://www.huyng.com/posts/faster-numpy-dot-product/
http://stackoverflow.com/questions/5990577/speeding-up-numpy-dot
http://wiki.scipy.org/PerformanceTips
http://thread.gmane.org/gmane.comp.python.numeric.general/28135/
Multi dot
http://wiki.scipy.org/Cookbook/MultiDot
Einsum
http://chintaksheth.wordpress.com/2013/07/31/numpy-the-tricks-of-the-trade-part-ii/
a = np.arange(4).reshape(2,2)
print a
print "np.einsum('ii', a), row i multiplied downwards"
print np.einsum('ii', a)
print "np.einsum('ij', a), same matrix ?"
print np.einsum('ij', a)
print "np.einsum('ji', a), transpose"
print np.einsum('ji', a)
print "np.einsum('ij,jk', a, a), dot product"
print np.einsum('ij,jk', a, a)
print np.dot(a, a)
Ellipsis broadcasting in numpy.einsum
http://stackoverflow.com/questions/16591696/ellipsis-broadcasting-in-numpy-einsum
http://comments.gmane.org/gmane.comp.python.numeric.general/53705
http://stackoverflow.com/questions/118370/how-do-you-use-the-ellipsis-slicing-syntax-in-python
http://stackoverflow.com/questions/772124/what-does-the-python-ellipsis-object-do
"..." Is designed to mean at this point, insert as many full slices (:) to extend the multi-dimensional slice to all dimensions.
print ""
a = np.arange(4).reshape(2,2)
print "a is"
print a
print "dot a"
print np.dot(a, a)
# Expand one axis in start, and tile up 2 times.
a2 = np.tile(a[None,:], (2, 1, 1))
print "a2 shape", a2.shape
print "einsum dot product over higher dimensions"
a2_e = np.einsum('...ij,...jk', a2, a2)
print a2_e
# Expand one axis in start, and tile up 2 times.
a3 = np.tile(a2[None,:], (2, 1, 1, 1))
print "a3 shape", a3.shape
print "einsum dot product over higher dimensions"
a3_e = np.einsum('...ij,...jk', a3, a3)
print a3_e
# With Ellipsis and axis notation
a = np.arange(4).reshape(2,2)
a = np.arange(4).reshape(2,2)
print "a is"
print a
print "dot a"
print np.dot(a, a)
# Expand one axis in start, and tile up 2 times.
a2 = np.tile(a[None,:], (2, 1, 1))
print "a2 shape", a2.shape
print "einsum dot product over higher dimensions"
a2_e = np.einsum(a2, [Ellipsis, 0, 1], a2, [Ellipsis, 1, 2])
print a2_e
# Expand one axis in start, and tile up 2 times.
a3 = np.tile(a2[None,:], (2, 1, 1, 1))
print "a3 shape", a3.shape
print "einsum dot product over higher dimensions"
a3_e = np.einsum(a3, [Ellipsis, 0, 1], a3, [Ellipsis, 1, 2])
print a3_e