Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2001
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2001

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

Search the Archive

Re: Making rectangular matrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg27160] Re: [mg27141] Making rectangular matrix
  • From: Tomas Garza <tgarza01 at prodigy.net.mx>
  • Date: Thu, 8 Feb 2001 04:40:46 -0500 (EST)
  • References: <200102070712.CAA29619@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

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: [mg27160] [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: Functional programming
  • Next by Date: Re: Making rectangular matrix
  • Previous by thread: Making rectangular matrix
  • Next by thread: Re: Making rectangular matrix