Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.soft-sys.math.mathematica > #3494
| From | Dana DeLouis <dana01@me.com> |
|---|---|
| Newsgroups | comp.soft-sys.math.mathematica |
| Subject | Re: Trying to use ReplacePart |
| Date | 2011-07-05 09:18 +0000 |
| Organization | Steven M. Christensen and Associates, Inc and MathTensor, Inc. |
| Message-ID | <iuukss$eri$1@smc.vnet.net> (permalink) |
Hi. Just to add...if you change your inputs, then things might get messy.
Not sure, but does this help?
Here is your example:
nNum=3;
nQnum=2;
cNum=2^(nNum-nQnum);
cQnum=2^(nNum-1);
list=Table[i,{i,1,cQnum}];
list1=Partition[list,cNum];
matrix=ConstantArray[0,{cQnum,cQnum}];
matrix1=RandomInteger[{1,10},{2^nNum,2^nNum}];
you=Table[matrix[[i,j]]=matrix1[[cNum*Position[list1,i][[1,1]]+i,cNum*Position[list1,j][[1,1]]+j]],{i,1,cQnum},{j,1,cQnum}]
{{6,3,1,1},{4,6,6,1},{9,1,2,3},{6,3,10,4}}
Here's another idea:
r=Table[cNum+j+cNum*Floor[(j-1)/cNum],{j,cQnum}]
{3,4,7,8}
me=Partition[Extract[matrix1,Tuples[r,2]],cQnum]
{{6,3,1,1},{4,6,6,1},{9,1,2,3},{6,3,10,4}}
you==me
True
= = = = = =
I=92ll do it again with different starting numbers (ie nNum and nQnum)
nNum=5;
nQnum=3;
cNum=2^(nNum-nQnum);
cQnum=2^(nNum-1);
list=Table[i,{i,1,cQnum}];
list1=Partition[list,cNum];
matrix=ConstantArray[0,{cQnum,cQnum}];
matrix1=RandomInteger[{1,10},{2^nNum,2^nNum}];
you=Table[matrix[[i,j]]=matrix1[[cNum*Position[list1,i][[1,1]]+i,cNum*Position[list1,j][[1,1]]+j]],{i,1,cQnum},{j,1,cQnum}];
Just note that your solution returns a 16 by 16 array:
Dimensions[you]
{16,16}
I'll try my version again:
r=Table[cNum+j+cNum*Floor[(j-1)/cNum],{j,cQnum}]
{5,6,7,8,13,14,15,16,21,22,23,24,29,30,31,32}
me=Partition[Extract[matrix1,Tuples[r,2]],cQnum];
me==you
True
Hmmm. Appears to work! :>)
= = = = = = = = = =
HTH : >)
Dana DeLouis
$Version
8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
On Jun 30, 8:43 pm, Iv=E1n Lazaro <gamins...@gmail.com> wrote:
> Hi!
>
> I needed some days ago to replace elements in a matrix. My first
> thought was to use ReplacePart, but I found myself trying to tell it
> to make all replacements at once, instead of returning multiple copies
> of the original matrix with only one element changed. As I was in a
> hurry, I solved the problem in a different way. However I'm still
> wondering how can I use a more "natural" code to solve this problem.
>
> nNum = 3;
> nQnum = 2;
>
> cNum = 2^(nNum - nQnum);
> cQnum = 2^(nNum - 1);
>
> list = Table[i, {i, 1, cQnum}];
> list1 = Partition[list, cNum];
> matrix = ConstantArray[0, {cQnum, cQnum}];
> matrix1 = RandomInteger[{1, 10}, {2^nNum, 2^nNum}]
>
> (matrix[[#[[1]], #[[2]]]] =
> matrix1[[
> cNum*Position[list1, #[[1]]][[1, 1]] + #[[1]], cNum*Position[list1,
> #[[2]]][[1, 1]] + #[[2]]]]) & /@ Tuples[{list, list}];
>
> or a faster solution,
>
> Table[matrix[[i, j]] =
> matrix1[[
> cNum*Position[list1, i][[1, 1]] + i, cNum*Position[list1, j][[1, 1]] +
> j]], {i, 1, cQnum}, {j, 1,cQnum}];
Re: Trying to use ReplacePart=
Back to comp.soft-sys.math.mathematica | Previous | Next | Find similar | Unroll thread
Re: Trying to use ReplacePart Dana DeLouis <dana01@me.com> - 2011-07-05 09:18 +0000
csiph-web