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=