[Date Index]
[Thread Index]
[Author Index]
Re: Making rectangular matrix
*To*: mathgroup at smc.vnet.net
*Subject*: [mg27180] Re: [mg27141] Making rectangular matrix
*From*: "Allan Hayes" <hay at haystack.demon.co.uk>
*Date*: Fri, 9 Feb 2001 03:10:25 -0500 (EST)
*References*: <200102070712.CAA29619@smc.vnet.net> <95tqif$m9m@smc.vnet.net>
*Sender*: owner-wri-mathgroup at wolfram.com
Tomas, Jeevan,
Another way to replace submatrices:
bigMat={{7,0,7,2,5,4,6},{2,2,4,9,2,9,0},{5,2,5,6,3,4,8},{0,3,9,9,8,0,0},{0,7
,
2,6,1,8,2},{8,5,5,7,5,7,0}};
smallMat={{3, 1, 2}, {5, 1, 9}};
(bigMat[[{1,2},{2,3,4}]]= smallMat;bigMat)/
{{7,3,1,2,5,4,6},{2,5,1,9,2,9,0},{5,2,5,6,3,4,8},{0,3,9,9,8,0,0},{0,7,2,6,1,
8,
2},{8,5,5,7,5,7,0}}
Or, if we don't wish to change the value of bigMat
bigMat={{7,0,7,2,5,4,6},{2,2,4,9,2,9,0},{5,2,5,6,3,4,8},{0,3,9,9,8,0,0},{0,7
,
2,6,1,8,2},{8,5,5,7,5,7,0}};
Block[{bm= bigMat},bm[[{1,2},{2,3,4}]]= smallMat;bm]
{{7,3,1,2,5,4,6},{2,5,1,9,2,9,0},{5,2,5,6,3,4,8},{0,3,9,9,8,0,0},{0,7,2,6,1,
8,
2},{8,5,5,7,5,7,0}}
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Tomas Garza" <tgarza01 at prodigy.net.mx> wrote in message
news:95tqif$m9m at smc.vnet.net...
> Let me see if I get you right. Given a bigMat (2-D) and a smallMat (also
> 2-D), you want to replace the submatrix of bigMat in an arbitrary (not
> random, I presume) location by smallMat? If such is the case, here is my
> suggestion. Suppose, for example, that bigMat is 6 x 7:
>
> In[1]:=
> bigMat = Table[Random[Integer, {0, 9}], {6}, {7}]
> Out[1]=
> {{7, 0, 7, 2, 5, 4, 6}, {2, 2, 4, 9, 2, 9, 0}, {5, 2, 5, 6, 3, 4, 8}, {0,
3,
> 9, 9, 8, 0, 0}, {0, 7, 2, 6, 1, 8, 2}, {8, 5, 5, 7, 5, 7, 0}}
>
> and that smallMat is 2 x 3:
>
> In[2]:=
> smallMat = Table[Random[Integer, {0, 9}], {2}, {3}]
> Out[2]=
> {{3, 1, 2}, {5, 1, 9}}
>
> Now you want to replace the submatrix whose upper left position is e.g.
row
> 1 and column 2 with smallMat, so as to get a new bigMat equal to
>
> {{7, 3, 1, 2, 5, 4, 6}, {2, 5, 1, 9, 2, 9, 0}, {5, 2, 5, 6, 3, 4, 8}, {0,
3,
> 9, 9, 8, 0, 0}, {0, 7, 2, 6, 1, 8, 2}, {8, 5, 5, 7, 5, 7, 0}}
>
> OK? Then let vert be the upper left position of the block in bigMat where
> you want to place smallMat. First you must test that, given vert, the size
> of smallMat fits into bigMat (i.e. vert +Dimensions[smallMat] -1 <=
> Dimensions[bigMat]), and then proceed to ReplacePart to each element of
the
> block one by one. Define the function rep as follows:
>
> In[3]:=
> rep[x_, {i_, j_}] := ReplacePart[x, smallMat[[i, j]], {vert[[1]]+ i - 1,
> vert[[2]] + j - 1}]
>
> which simply replaces an element in matrix x with the corresponding
element
> of smallMat. Then
>
> In[4]:=
> b = Partition[Flatten[Outer[List, Range[dims[[1]]], Range[dims[[2]]]]], 2]
> Out[4]=
> {{1, 1}, {1, 2}, {1, 3}, {2, 1}, {2, 2}, {2, 3}}
> In[5]:=
> Fold[rep, bigMat, b]
> Out[5]=
> {{7, 3, 1, 2, 5, 4, 6}, {2, 5, 1, 9, 2, 9, 0}, {5, 2, 5, 6, 3, 4, 8}, {0,
3,
> 9, 9, 8, 0, 0}, {0, 7, 2, 6, 1, 8, 2}, {8, 5, 5, 7, 5, 7, 0}}
>
> Tomas Garza
> Mexico City
>
>
> ----- Original Message -----
> From: "jeevan" <jeevan4 at hotmail.com>
To: mathgroup at smc.vnet.net
> Subject: [mg27180] [mg27141] Making rectangular matrix
>
>
> > How can I make a square or rectangle matrix(2-D) that can be placed
> > at random locations of a bigger 2-D matrix.Thank you.
> >
>
>
Prev by Date:
**Re: Determine the "value range" of a function**
Next by Date:
**Re: Problem in loading own Package**
Previous by thread:
**Re: Making rectangular matrix**
Next by thread:
**Re: Making rectangular matrix**
| |