<div dir="ltr"><div>Take a look as einsum, it is quite good for such things.<br><br></div>Chuck<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Nov 25, 2014 at 9:06 PM, Yuxiang Wang <span dir="ltr"><<a href="mailto:yw5aj@virginia.edu" target="_blank">yw5aj@virginia.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear all,<br>
<br>
I have been doing tensor algebra recently (for continuum mechanics)<br>
and was looking into two common operations: tensor product & tensor<br>
contraction.<br>
<br>
1. Tensor product<br>
<br>
One common usage is:<br>
a[i1, i2, i3, ..., iN, j1, j2, j3, ..., jM] = b[i1, i2, i3, ..., iN] *<br>
c[j1, j2, j3, ..., jM]<br>
<br>
I looked into the current np.outer(), and the only difference is that<br>
it always flattens the input array. So actually, the function for<br>
tensor product is simply<br>
<br>
np.outer(a, b, out=out).reshape(a.shape+b.shape)  <-- I think I got<br>
this right but please do correct me if I am wrong<br>
<br>
Would anyone think it helpful or harmful to add such a function,<br>
np.tensorprod()? it will simply be like<br>
def tensorprod(a, b, out=None):<br>
    return outer(a, b, out=out).reshape(a.shape+b.shape)<br>
<br>
<br>
2. Tensor contraction<br>
<br>
It is currently the np.tensordot(a, b) and it will do np.tensordot(a,<br>
b, axes=2) by default. I think this is all great, but it would be even<br>
better if we specify in the doc, that:<br>
    i) say explicitly that by default it will be the double-dot or<br>
contraction operator, and<br>
    ii) explain that in cases where axes is an integer-like scalar,<br>
which axes were selected from the two array and in what order. Like:<br>
if axes is an integer-like scalar, it is the number axes to sum over,<br>
equivalent to axes=(list(range(-axes, 0)), list(range(0, axes)))   (or<br>
something like this)<br>
<br>
<br>
It'd be great to hear what you would think about it,<br>
<br>
Shawn<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
Yuxiang "Shawn" Wang<br>
Gerling Research Lab<br>
University of Virginia<br>
<a href="mailto:yw5aj@virginia.edu">yw5aj@virginia.edu</a><br>
<a href="tel:%2B1%20%28434%29%20284-0836" value="+14342840836">+1 (434) 284-0836</a><br>
<a href="https://sites.google.com/a/virginia.edu/yw5aj/" target="_blank">https://sites.google.com/a/virginia.edu/yw5aj/</a><br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</font></span></blockquote></div><br></div>