Listable Attribute of Pure Function that returns a matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg130724] Listable Attribute of Pure Function that returns a matrix
- From: Dan O'Brien <danobrie at gmail.com>
- Date: Mon, 6 May 2013 04:24:13 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
As I understand it, a function which has its attribute set to Listable should thread over any arguments presented as lists. In[25]:= ClearAll[func] SetAttributes[func, Listable] func[a, b, c, Array[d, 4]] Out[27]= {func[a, b, c, d[1]], func[a, b, c, d[2]], func[a, b, c, d[3]], func[a, b, c, d[4]]} Ok, this is fine. Now, if I take the symbol 'f' and define a function that returns a matrix In[35]:= func[a_, b_, c_, d_] := {{a, b}, {c, d}} func[a, b, c, Array[d, 4]] Out[36]= {{{a, b}, {c, d[1]}}, {{a, b}, {c, d[2]}}, {{a, b}, {c, d[3]}}, {{a, b}, {c, d[4]}}} Still doing fine, this threaded over my array of d's and returned a list of arrays as expected. It appears that mathematica constructs the list of Out[27] and then evaluates. Now, I do the same but instead I define a pure function In[37]:= ClearAll[func] SetAttributes[func, Listable] func = {{#1, #2}, {#3, #4}} &; func[a, b, c, Array[d, 4]] Out[40]= {{a, b}, {c, {d[1], d[2], d[3], d[4]}}} Clearly this is not behaving as a listable function, its simply substituting the list of d's for the 4th argument. If I do the same for a pure function that does not return a list, everything is fine: In[42]:= ClearAll[func2] SetAttributes[func2, Listable] func2 = (#1 + #2)/(#3 - #4) & func2[a, b, c, Array[d, 4]] Out[44]= (#1 + #2)/(#3 - #4) & Out[45]= {(a + b)/(c - d[1]), (a + b)/(c - d[2]), (a + b)/( c - d[3]), (a + b)/(c - d[4])} And in any case, mathematica behaves the same here if I don't do anything with the Attributes of func2, that is, there is no need to explicitly SetAttributes to Listable for this particular example. I don't pretend to know all the ins and outs of Attributes, but is my result for the pure function 'func' in Out[40] expected?
- Follow-Ups:
- Re: Listable Attribute of Pure Function that returns a
- From: Leonid Shifrin <lshifr@gmail.com>
- Re: Listable Attribute of Pure Function that returns a
- From: Alex Krasnov <akrasnov@eecs.berkeley.edu>
- Re: Listable Attribute of Pure Function that returns a