Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.soft-sys.math.mathematica > #3298
| From | Leonid Shifrin <lshifr@gmail.com> |
|---|---|
| Newsgroups | comp.soft-sys.math.mathematica |
| Subject | Re: Multiple use of Set on lists |
| Date | 2011-06-25 09:31 +0000 |
| Organization | Steven M. Christensen and Associates, Inc and MathTensor, Inc. |
| Message-ID | <iu49u8$jph$1@smc.vnet.net> (permalink) |
| References | <itm0of$143$1@smc.vnet.net> |
Here is a bit less exotic solution:
Set @@@ Append @@@
Transpose[{Thread[Hold[cs] /. OwnValues[cs]], rands}]
You may try for example with
cs = {c[1/2][-(1/2)][1/2][-(1/2)][-1], c[1/2][-(1/2)][1/2][1/2][-1]}
rands = {1,2}
but I'd agree that it may be better to reformulate the problem.
Regards,
Leonid
On Tue, Jun 21, 2011 at 1:51 PM, Oleksandr Rasputinov <
oleksandr_rasputinov@hmamail.com> wrote:
> The problem is due to Set being HoldFirst but MapThread not having any
> corresponding Hold attributes. While the c's are being substituted for
> their values too early, this is not an issue with MapThread per se; rather
> it is a consequence of how attributes affect the order of evaluation in
> Mathematica.
>
> An ugly hack which solves the problem as stated is the following:
>
> SubValues[c] = Block[{c},
> MapThread[Set, {cs, rands}];
> SubValues[c]
> ];
>
> However, it may be better to reformulate the problem in such a way
> that this construct is not needed.
>
> On Jun 21, 12:38 am, Jonathan Frazer <J.Fra...@sussex.ac.uk> wrote:
> > Hello,
> >
> > I have a largish list of awkwardly "indexed variables", of the form cs =
> > {c[1/2][-(1/2)][1/2][-(1/2)][-1],
> c[1/2][-(1/2)][1/2][1/2][-1]......etc....
> > ....} which need to be assigned random values multiple times inside a Do
> loop. I was hoping I could generate a new list of random numbers each time
> then do something like
> >
> > MapThread[Set, {cs, rands}]
> >
> > Where "rands" would be the list of random numbers. I'm clearly
> misunderstanding how MapThread works though as this doesn't work. Rather
> than getting "c[1/2][-(1/2)][1/2][-(1/2)][-1]=new random number", instead
> "old random number=new random number" is what seems to be happening.
> >
> > As a last resort I thought I would just clear the variables at the
> beginning of the do loop but you can't use Clear to do this and I don't see
> how you can apply "=." (Unset) over a list either.
> >
> > Any suggestions?
> >
> > Many thanks,
> >
> > Jonny
>
>
Back to comp.soft-sys.math.mathematica | Previous | Next — Previous in thread | Find similar | Unroll thread
How to find one expression in terms of another expression? Jacare Omoplata <walkeystalkey@gmail.com> - 2011-06-19 23:29 +0000
Re: How to find one expression in terms of another expression? Ray Koopman <koopman@sfu.ca> - 2011-06-20 23:37 +0000
Re: How to find one expression in terms of another expression? Jacare Omoplata <walkeystalkey@gmail.com> - 2011-06-21 11:18 +0000
Multiple use of Set on lists Jonathan Frazer <J.Frazer@sussex.ac.uk> - 2011-06-20 23:38 +0000
Re: Multiple use of Set on lists Oleksandr Rasputinov <oleksandr_rasputinov@hmamail.com> - 2011-06-21 11:17 +0000
Re: Multiple use of Set on lists Leonid Shifrin <lshifr@gmail.com> - 2011-06-25 09:31 +0000
csiph-web