Is there a reasonable default value for the dimensions (1-dimensional
I suppose)? If so, it's better to make it a keyword argument as Ondrej
suggests.

Aaron Meurer

On Fri, Dec 4, 2015 at 9:39 AM, Ondřej Čertík <[email protected]> wrote:
> Hi Francesco,
>
> On Fri, Dec 4, 2015 at 2:32 AM, Francesco Bonazzi
> <[email protected]> wrote:
>> Hello,
>>
>> the code I wrote to add N-dim arrays to SymPy is (almost) ready. The only
>> point is the order of the constructor arguments.
>>
>> https://github.com/sympy/sympy/pull/10180
>>
>> Four classes are provided:
>>
>> MutableDenseNDimArray
>> MutableSparseNDimArray
>> ImmutableDenseNDimArray
>> ImmutableSparseNDimArray
>>
>> Immutable ones are SymPy objects (they subclass Expr), mutable ones are not.
>> The structure loosely reflects the matrix module.
>>
>>
>> The remaining issue: argument order
>>
>> Currently the dimensions should preceed the iterable, that is, construction
>> would be like:
>>
>> In [1]: from sympy.tensor.array import *
>>
>> In [2]: from sympy import *
>>
>> In [3]: a = ImmutableDenseNDimArray(2, 3, 4, range(2*3*4))
>>
>> In [4]: a
>> Out[4]: [[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], [[12, 13, 14, 15],
>> [16, 17, 18, 19], [20, 21, 22, 23]]]
>>
>>
>>
>> SymPy matrices specify dimensions before the iterable:
>>
>>
>> In [5]: Matrix(2, 3, range(6))
>> Out[5]:
>> Matrix([
>> [0, 1, 2],
>> [3, 4, 5]])
>>
>>
>> I thought it would be a good idea to preserve that order. Unfortunately,
>> being the number of dimensions variable, one cannot (prior to Python 3.5)
>> use the shortened form ImmutableDenseNDimArray(*dims, iterable).
>>
>> Do you think we should postpone the dimensions?
>>
>> That is:
>>
>> ImmutableDenseNDimArray(iterable, *dims)
>>
>> instead of
>>
>> ImmutableDenseNDimArray(dim1, dim2, ... , iterable)
>>
>> Consider that the different standard used in matrices could be resolved by
>> adding a new argument order in the matrix construction, e.g. by allowing an
>> expression like Matrix(range(6), 2, 3) to mean Matrix(2, 3, range(6)).
>
> I would try to stay close to NumPy. I am actually not sure how to
> properly construct 3D arrays. One way is this:
>
> In [12]: reshape(array(range(2*3*4)), (2, 3, 4))
> Out[12]:
> array([[[ 0,  1,  2,  3],
>         [ 4,  5,  6,  7],
>         [ 8,  9, 10, 11]],
>
>        [[12, 13, 14, 15],
>         [16, 17, 18, 19],
>         [20, 21, 22, 23]]])
>
> So for this reason, it looks like your proposal
>
> ImmutableDenseNDimArray(iterable, *dims)
>
> is better. We can provide perhaps a shape argument, to be used as follows:
>
> ImmutableDenseNDimArray(range(2*3*4), shape=[2, 3, 4])
>
>
> Ondrej
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sympy.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/CADDwiVANyerbj%3D5jckf5iDo-jWuxiDd55XJO%2BPxWB7g8Xq%2BxpA%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6L4M8gZSb%2B6KSQfHw%2B%2BabNR3ut9ergx-b7ZVyF%2BKczwUw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to