3
$\begingroup$

How can I set certain entries in a matrix to be 0?

Given an $m\times n$ matrix with specified values:

mat = Table[1/i, {i, n}, {j, m}]

I want to make some entries 0: I will replace row $i$ with zeros when the greatest prime factor of $i$ exceeds the greatest prime factor of $n$:

GreatestPrimeFactor[1] := 1
GreatestPrimeFactor[n_Integer?Positive] := FactorInteger[n][[-1, 1]]
ReplacePart[m, {i_,j_}/; GreatestPrimeFactor[i]>GreatestPrimeFactor[n]-
>0]

I also want to set additional entries to 0, but before I do that, I want to record something to recall later; e.g., the column sums.

Total[mat, {1}]

Then I also set the $(i,j)$ entry to be $0$ when $j/\gcd(i,j)$ is composite:

 ReplacePart[m, {i_,j_}/;compositeQ[j/GCD[i,j]]->0]

How can this be done in the table environment? I will consider using Array instead of Table.

$\endgroup$

1 Answer 1

3
$\begingroup$
condition[i_, j_, n_] := FactorInteger[i][[-1, 1]] <= FactorInteger[n][[-1, 1]] && 
   (j/GCD[i, j] == 1 || PrimeQ[j/GCD[i, j]])

Using SparseArray:

sa[m_, n_] := SparseArray[{{i_, j_} /; condition[i, j, n] -> 1/i}, {m, n}]

Example:

sa[10, 10] // MatrixForm // TeXForm

$\left( \begin{array}{cccccccccc} 1 & 1 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 \\ \frac{1}{2} & \frac{1}{2} & \frac{1}{2} & \frac{1}{2} & \frac{1}{2} & \frac{1}{2} & \frac{1}{2} & 0 & 0 & \frac{1}{2} \\ \frac{1}{3} & \frac{1}{3} & \frac{1}{3} & 0 & \frac{1}{3} & \frac{1}{3} & \frac{1}{3} & 0 & \frac{1}{3} & 0 \\ \frac{1}{4} & \frac{1}{4} & \frac{1}{4} & \frac{1}{4} & \frac{1}{4} & \frac{1}{4} & \frac{1}{4} & \frac{1}{4} & 0 & \frac{1}{4} \\ \frac{1}{5} & \frac{1}{5} & \frac{1}{5} & 0 & \frac{1}{5} & 0 & \frac{1}{5} & 0 & 0 & \frac{1}{5} \\ \frac{1}{6} & \frac{1}{6} & \frac{1}{6} & \frac{1}{6} & \frac{1}{6} & \frac{1}{6} & \frac{1}{6} & 0 & \frac{1}{6} & \frac{1}{6} \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \frac{1}{8} & \frac{1}{8} & \frac{1}{8} & \frac{1}{8} & \frac{1}{8} & \frac{1}{8} & \frac{1}{8} & \frac{1}{8} & 0 & \frac{1}{8} \\ \frac{1}{9} & \frac{1}{9} & \frac{1}{9} & 0 & \frac{1}{9} & \frac{1}{9} & \frac{1}{9} & 0 & \frac{1}{9} & 0 \\ \frac{1}{10} & \frac{1}{10} & \frac{1}{10} & \frac{1}{10} & \frac{1}{10} & \frac{1}{10} & \frac{1}{10} & 0 & 0 & \frac{1}{10} \\ \end{array} \right)$

Using Table:

table[m_, n_] := Table[If[condition[i, j, n], 1/i, 0], {i, n}, {j, m}]

Normal[sa[10, 10]] == table[10, 10]

True

$\endgroup$
3
  • $\begingroup$ @TheSubstitute, i think it is fixed now (replacing || with && in condition) $\endgroup$
    – kglr
    Oct 8, 2017 at 21:36
  • $\begingroup$ Thanks. Why are there zeros in column 1? Can we avoid calling 1 a composite in the code? $\endgroup$ Oct 8, 2017 at 21:39
  • $\begingroup$ @TheSubstitute, changed condition to fix that issue. $\endgroup$
    – kglr
    Oct 8, 2017 at 21:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.