Re: Elementwise Matrix Subtraction
- To: mathgroup at smc.vnet.net
- Subject: [mg121680] Re: Elementwise Matrix Subtraction
- From: Murray Eisenberg <murray at math.umass.edu>
- Date: Sun, 25 Sep 2011 05:42:59 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201109250234.WAA26217@smc.vnet.net>
- Reply-to: murray at math.umass.edu
Once you take MatrixForm of a nested list representing a matrix, you no longer have that "matrix" and so cannot perform matrix operations upon it. Essentially, MatrixForm is something you want to use only to display a list of lists as a matrix. The following gives the same result for km1 as for km2: examplegraph = Graph[{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 3, 3 \[UndirectedEdge] 4, 4 \[UndirectedEdge] 5, 4 \[UndirectedEdge] 6, 1 \[UndirectedEdge] 5, 2 \[UndirectedEdge] 5}, {VertexLabels -> "Name"}, {ImagePadding -> 10}]; km1 = KirchhoffMatrix[examplegraph]; km1 // MatrixForm am = AdjacencyMatrix[examplegraph]; am // MatrixForm im = DiagonalMatrix[{2, 3, 2, 3, 3, 1}]; im // MatrixForm km2 = im - am; km2 // MatrixForm On 9/24/11 10:34 PM, velvetfish1 at hotmail.com wrote: > I am trying to do a simple element-wise matrix subtraction to obtain > the Laplacian Matrix of a Graph, by doing an element wise subtraction > of the adjacency matrix, using AdjacenyMatrix[] from the incidence > matrix derived from input using DiagonalMatrix[] that I am using as a > simple check to understand more complex matrices have been properly > specified. This should give the same result as KirchhoffMatrix[]. > However, I get a behavior I don't quite understand. > > Rather than seeing the evaluated result of the element-wise > subtraction instead I see, when visualizing in //MatrixForm the > difference of the two matrices each shown in MatrixForm but > symbolically specified as the difference two separate matrices, rather > than as a single matrix with the subtraction evaluated. I've tried > doing the subtraction either in a map or only by using the > Subtraction[] function. It seems that in either case the kernel is > not evaluating the subtraction, but I can not figure out why. There > is no HoldOn[] being specified as far as I know, but am unsure how to > tell, not having specified one. > > The code is as follows: > > examplegraph = > Graph[{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 3, > 3 \[UndirectedEdge] 4, 4 \[UndirectedEdge] 5, > 4 \[UndirectedEdge] 6, 1 \[UndirectedEdge] 5, > 2 \[UndirectedEdge] 5}, {VertexLabels -> "Name"}, {ImagePadding -> > 10}] > > km1 = KirchhoffMatrix[examplegraph] // MatrixForm > > am = AdjacencyMatrix[examplegraph] // MatrixForm > > im = DiagonalMatrix[{2, 3, 2, 3, 3, 1}] // MatrixForm > > km2 = MatrixForm /@ {im - am} > > km3 = Subtract[dm, am] > > km2 // MatrixForm > > km3 // MatrixForm > > > Thus the output looks like: > > \!\(\* > TagBox[ > RowBox[{ > TagBox[ > RowBox[{"(", "", GridBox[{ > {"2", "0", "0", "0", "0", "0"}, > {"0", "3", "0", "0", "0", "0"}, > {"0", "0", "2", "0", "0", "0"}, > {"0", "0", "0", "3", "0", "0"}, > {"0", "0", "0", "0", "3", "0"}, > {"0", "0", "0", "0", "0", "1"} > }, > GridBoxAlignment->{ > "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, > "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, > GridBoxSpacings->{"Columns" -> { > Offset[0.27999999999999997`], { > Offset[0.7]}, > Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { > Offset[0.2], { > Offset[0.4]}, > Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}], > Function[BoxForm`e$, > MatrixForm[BoxForm`e$]]], "-", > TagBox[ > RowBox[{"(", "", GridBox[{ > {"0", "1", "0", "0", "1", "0"}, > {"1", "0", "1", "0", "1", "0"}, > {"0", "1", "0", "1", "0", "0"}, > {"0", "0", "1", "0", "1", "1"}, > {"1", "1", "0", "1", "0", "0"}, > {"0", "0", "0", "1", "0", "0"} > }, > GridBoxAlignment->{ > "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, > "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, > GridBoxSpacings->{"Columns" -> { > Offset[0.27999999999999997`], { > Offset[0.7]}, > Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { > Offset[0.2], { > Offset[0.4]}, > Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}], > Function[BoxForm`e$, > MatrixForm[ > SparseArray[ > Automatic, {6, 6}, 0, { > 1, {{0, 2, 5, 7, 10, 13, 14}, {{2}, {5}, {1}, {3}, {5}, {2}, { > 4}, {3}, {5}, {6}, {4}, {1}, {2}, {4}}}, {1, 1, 1, 1, 1, 1, > 1, 1, 1, 1, 1, 1, 1, 1}}]]]]}], > Function[BoxForm`e$, > MatrixForm[BoxForm`e$]]]\) > > Rather than: > > \!\(\* > TagBox[ > RowBox[{"(", "", GridBox[{ > {"2", > RowBox[{"-", "1"}], "0", "0", > RowBox[{"-", "1"}], "0"}, > { > RowBox[{"-", "1"}], "3", > RowBox[{"-", "1"}], "0", > RowBox[{"-", "1"}], "0"}, > {"0", > RowBox[{"-", "1"}], "2", > RowBox[{"-", "1"}], "0", "0"}, > {"0", "0", > RowBox[{"-", "1"}], "3", > RowBox[{"-", "1"}], > RowBox[{"-", "1"}]}, > { > RowBox[{"-", "1"}], > RowBox[{"-", "1"}], "0", > RowBox[{"-", "1"}], "3", "0"}, > {"0", "0", "0", > RowBox[{"-", "1"}], "0", "1"} > }, > GridBoxAlignment->{ > "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, > "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, > GridBoxSpacings->{"Columns" -> { > Offset[0.27999999999999997`], { > Offset[0.7]}, > Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { > Offset[0.2], { > Offset[0.4]}, > Offset[0.2]}, "RowsIndexed" -> {}}], "", ")"}], > Function[BoxForm`e$, > MatrixForm[ > SparseArray[ > Automatic, {6, 6}, 0, { > 1, {{0, 3, 7, 10, 14, 18, 20}, {{1}, {2}, {5}, {2}, {1}, {3}, { > 5}, {3}, {2}, {4}, {4}, {3}, {5}, {6}, {5}, {4}, {1}, {2}, { > 6}, {4}}}, {2, -1, -1, 3, -1, -1, -1, 2, -1, -1, > 3, -1, -1, -1, 3, -1, -1, -1, 1, -1}}]]]]\) > > As I would expect. > > Does anyone have an idea why the evaluation does not take place, even > when it is explicitly evaluated? Could this have something to do with > "automatic" display or evaluation when a Sparce Array is being created > implicitly? > > Thanks in advance for any help, someone might kindly provide. > -- Murray Eisenberg murray at math.umass.edu Mathematics & Statistics Dept. Lederle Graduate Research Tower phone 413 549-1020 (H) University of Massachusetts 413 545-2859 (W) 710 North Pleasant Street fax 413 545-1801 Amherst, MA 01003-9305
- References:
- Elementwise Matrix Subtraction
- From: velvetfish1@hotmail.com
- Elementwise Matrix Subtraction