MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Trying to use ReplacePart

  • To: mathgroup at smc.vnet.net
  • Subject: [mg120017] Re: Trying to use ReplacePart
  • From: Dana DeLouis <dana01 at me.com>
  • Date: Tue, 5 Jul 2011 05:12:16 -0400 (EDT)

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... at 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=


  • Prev by Date: Re: Can I use NonlinearModelFit to model some data with a piece wise linear function??
  • Next by Date: FullSimplify TransformedDistribution
  • Previous by thread: Re: Trying to use ReplacePart
  • Next by thread: Re: Trying to use ReplacePart