I have a matrix Mat1
whos columns are ordered as :
Col = Flatten[Outer[{#2, #1} &, {0, 1}, Delete[Range[-2, 2, 1], 3]], 1]
and the rows are ordered as:
Rows = Flatten[Outer[{#1, #2} &, Delete[Range[-1, 1, 1], 2], Delete[Range[-1, 1, 1], 2]], 1]
The matrix is given as:
Mat1 = Outer[f[Flatten[{#1, #2}]] &, Col, Rows, 1]
$$ \left( \begin{array}{cccc} f(\{-2,0,-1,-1\}) & f(\{-2,0,-1,1\}) & f(\{-2,0,1,-1\}) & f(\{-2,0,1,1\}) \\f(\{-1,0,-1,-1\}) & f(\{-1,0,-1,1\}) & f(\{-1,0,1,-1\}) & f(\{-1,0,1,1\}) \\f(\{1,0,-1,-1\}) & f(\{1,0,-1,1\}) & f(\{1,0,1,-1\}) & f(\{1,0,1,1\}) \\f(\{2,0,-1,-1\}) & f(\{2,0,-1,1\}) & f(\{2,0,1,-1\}) & f(\{2,0,1,1\}) \\ f(\{-2,1,-1,-1\}) & f(\{-2,1,-1,1\}) & f(\{-2,1,1,-1\}) & f(\{-2,1,1,1\}) \\ f(\{-1,1,-1,-1\}) & f(\{-1,1,-1,1\}) & f(\{-1,1,1,-1\}) & f(\{-1,1,1,1\}) \\ f(\{1,1,-1,-1\}) & f(\{1,1,-1,1\}) & f(\{1,1,1,-1\}) & f(\{1,1,1,1\}) \\ f(\{2,1,-1,-1\}) & f(\{2,1,-1,1\}) & f(\{2,1,1,-1\}) & f(\{2,1,1,1\}) \end{array} \right)$$
Another matrix Mat2
with a fewer elements is given as:
Mat2 = Outer[f[Flatten[{#1 , #2}]] &, {{-2, 0}, {1, 0}, {2, 1}}, {{-1, 1}, {1, -1}, {1, 1}}, 1]
$$\left( \begin{array}{ccc} f(\{-2,0,-1,1\}) & f(\{-2,0,1,-1\}) & f(\{-2,0,1,1\}) \\ f(\{1,0,-1,1\}) & f(\{1,0,1,-1\}) & f(\{1,0,1,1\}) \\ f(\{2,1,-1,1\}) & f(\{2,1,1,-1\}) & f(\{2,1,1,1\}) \end{array} \right)$$
I want to make all the elements of the first matrix (Mat1
) equal to zero that are not same as elements of Mat2
. This will create a kind of a sparse matrix like:
$$\left( \begin{array}{cccc} 0 & f(\{-2,0,-1,1\}) & f(\{-2,0,1,-1\}) & f(\{-2,0,1,1\}) \\ 0 & 0 & 0 & 0 \\ 0 & f(\{1,0,-1,1\}) & f(\{1,0,1,-1\}) & f(\{1,0,1,1\}) \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & f(\{2,1,-1,1\}) & f(\{2,1,1,-1\}) & f(\{2,1,1,1\}) \end{array} \right)$$
How can I do this? (and for any general Range
of col
and Rows
)
Edit: Building Mat1
with Outer
for a large list of Rows
and Col
causes my system to hang and removes all variables from Mathematica. Outer
carries out the arrangement of the elements at the positions I need in the matrix but it doesn't work for very big dimensions. I am only interested in the final sparse matrix with the elements at the positions dictated by the list of Rows
and Col
. Is there any way to get the final matrix by somehow using Rows
and Col
without the need to build Mat1
?.