I'm not sure how to name this problem appropriately. But anyway.
I have, say, three variables (arrays in my case), which I call:
A1, A2, A3
I would like to perform a certain operation on all of these arrays. Obviously I don't want to duplicate the code. What I figured is the following:
For[id = 1, id <= 3,
INPUT = ToExpression["A" <> ToString[id]];
INPUT = Table[{INPUT[[j, 1]], 10^4*INPUT[[j, 2]]}, {j, 1, Length[INPUT]}];
id += 1;
];
This unfortunately does NOT work.
It's just an example. But the big question is how to handle names of variables in "such" cases? Any help greatly appreciated.
Answer
Here is one approach to solving your problem. I do not consider the part of your problem that asks how to generate a list of varialbe names, as that is well covered in links to previous questions already provided in comments made to your question.
Define a function that will perfom your operation on one matrix.
myOperation[m : {{_, _} ..}] :=
ReplacePart[m, {i_, 2} :> 10^4 m[[i, 2]]]
To apply the operation to the matrices, use Map
.
Map[myOperation, {a, b, c}]
This can also be written
myOperation[#] & /@ {a, b, c}
Testing
To test this solution to problem, make some data.
make[] := RandomInteger[20, {4, 2}]
{a, b, c} = {make[], make[], make[]};
{{{6, 11}, {9, 16}, {13, 4}, {5, 13}},
{{17, 14}, {11, 12}, {4, 3}, {12, 0}},
{{19, 0}, {11, 5}, {11, 20}, {1, 1}}}
First test is to try myOperation
with one matrix.
myOperation[a]
{{6, 110000}, {9, 160000}, {13, 40000}, {5, 130000}}
Second test is to try it with all three.
Map[myOperation, {a, b, c}]
{{{6, 110000}, {9, 160000}, {13, 40000}, {5, 130000}},
{{17, 140000}, {11, 120000}, {4, 30000}, {12, 0}},
{{19, 0}, {11, 50000}, {11, 200000}, {1, 10000}}}
If you want the orginal variables to have the new values, you can do
{a, b, c} = %;
Comments
Post a Comment