Does it support vectorized operations, e.g., should ArrayComprehension(...) + ArrayComprehension(...) work to add the corresponding elements? If so, then it's an array. If not, then it's more like a list or tuple.
Aaron Meurer On Tue, Jun 4, 2019 at 6:52 AM Chris Smith <smi...@gmail.com> wrote: >> >> As you can see, `ArrayComprehension` is more likely to be a such structure: >> [[[...]...]...]. > > > Ahh...I see what you mean about the multidimensionality, now. It is a > reshaped list comprehension: > > >>> reshape([i + j for i in range(4) for j in range(3) for k in > range(2)], [[2]]*3) > [[[0, 0], [1, 1], [2, 2]], [[1, 1], [2, 2], [3, 3]], [[2, 2], [3, 3], [4, > 4]], [[3, 3], [4, 4], [5, 5]]] > >>> _==S(str(ArrayComprehension(i+j ,(i,0,3),(j,0,2),(k,0,1)).doit())) > True > > So I see the reason not to call it a List. > > On Tuesday, June 4, 2019 at 4:23:20 AM UTC-5, Zhiqi KANG wrote: >> >> Hi, >> >> As far as I know, the difference between `ArrayComprehension` and `list` >> lies in the notion of multidimensionality. >> >> First of all, for clarification, >> >> > `List(i + j, (i,0,3), (j,0,4))` is the unevaluated form of `[i + j for i >> > in range(4) for j in range(5)]`. >> >> is not quite true regarding the implementation of `ArrayComprehension`. In >> fact, `ArrayComprehension(i + j, (i,0,3), (j,0,4))` will be like `[[i + j >> for i in range(5)] for j in range(4)]`. Not to mention the different order >> of dimensions because the limits in `ArrayComprehension` are executed from >> left to right, the resulting output is a multidimensional list. So each time >> there is one more limit, the dimension of output list will +1. As you can >> see, `ArrayComprehension` is more likely to be a such structure: >> [[[...]...]...]. This multidimensionality comes from Table in Wolfram >> Mathematica, which is the the example of the implementation of >> `ArrayComprehension`. >> >> Secondly, the implementation follows the example of `Array` module in SymPy, >> which means the properties and functions like `shape`, `rank()` have been >> already implemented.Plus, its output is of type `ImmutableDenseNDimArray`. >> Since an array has by default a notion of multidimensionality, it would be >> more coherent to call it as an array. That's why its name is >> `ArrayComprehension` rather than `ListComprehension`. >> >> However, it is no doubt that `ArrayComprehension` resembles a lot to list. >> It would be a good idea to have something similar to list implemented in >> SymPy, in order to add a notion of 'immutable' to list. Either renaming >> ArrayComprehension or creating a new module to do so is faisible. >> >> That's what I have understood while implementing `ArrayComprehension`. I >> hope that it could help make some concepts clear. >> >> Zhiqi >> >> >> 在 2019年6月4日星期二 UTC+2上午5:46:03,Chris Smith写道: >>> >>> From discussion at #16926 where I suggest that perhaps we should be naming >>> ArrayComprehension as List and it was said, >>> >>> > [ArrayComprehension] is supposed to be a multidimensional list >>> > comprehension >>> >>> It looks like an unevaluated List to me: `List(i + j, (i,0,3), (j,0,4))` is >>> the unevaluated form of `[i + j for i in range(4) for j in range(5)]`. (For >>> comparison, Integral and Sum are examples of an unevaluated Expr, which, >>> after a doit and the right conditions, lose the wrapper and become other >>> Expr.) >>> >>> An evaluated form would be `List([1, 2, 3, 4])` where the `[]` would be >>> necessary to distinguish between the evaluated and comprehension form. >>> >>> Are we going to regret introducing an object that is so closely related to >>> a list or will we always want a list to be an unsympified object in SymPy? >>> >>> /c > > -- > 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 sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > Visit this group at https://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/fbf59f35-2dc2-4d48-a79b-3643276ec8dc%40googlegroups.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 sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAKgW%3D6KmO9FuUT9OBr8g%3Dnz4jFg2wjn6%2B31nquRio5h2vr5gtA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.