Re: Trying to use ReplacePart
- To: mathgroup at smc.vnet.net
- Subject: [mg119958] Re: Trying to use ReplacePart
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Fri, 1 Jul 2011 04:50:37 -0400 (EDT)
On 6/30/11 at 8:40 PM, gaminster at gmail.com (Iv=C3=A1n Lazaro) wrote: >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}]; Natural is not well defined. But simpler I can do. First, I can generate a list of the rows/cols you appear to be after as follows: In[3]:= rcList = Flatten@Partition[Range[3, 8], 2, 4] Out[3]= {3,4,7,8} with that I can create a 4 x 4 matrix with entries from the larger matrix as follows: In[4]:= lgMatrix = Table[a[i, j], {i, 8}, {j, 8}]; In[5]:= smMatrix = lgMatrix[[rcList, rcList]] Out[9]= {{a[3, 3], a[3, 4], a[3, 7], a[3, 8]}, {a[4, 3], a[4, 4], a[4, 7], a[4, 8]}, {a[7, 3], a[7, 4], a[7, 7], a[7, 8]}, {a[8, 3], a[8, 4], a[8, 7], a[8, 8]}}