> > 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 > <https://reference.wolfram.com/language/ref/Table.html> 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 <https://github.com/sympy/sympy/pull/16929> 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.