4
$\begingroup$

I'm currently learning from the wonderful post:

Where can I find examples of good Mathematica programming practice?

And i'm correcting my habits using Nest/Map/Thread instead of loops. The problem that i'm having is that i cannot find a clear/elegant expression using functional programming aproaches to do the following:

Imagine that you have a nxn matrix. I want to create a function that for each non-border entry of the matrix ( $i,j \neq 1,n$ ) the result will be the sum of all adjacent entries. For example:

$ f(A_{i,j} )= A_{i-1,j-1}+A_{i,j-1}+A_{i+1,j-1}+A_{i-1,j}+A_{i+1,j}+A_{i-1,j+1}+A_{i,j+1}+A_{i+1,j+1} $.

I'm sure that there will be thousands of elegant ways to do this. I'm really waiting to see your nice approach.

$\endgroup$
1
  • 1
    $\begingroup$ Hi, take a look at ListConvolve. $\endgroup$
    – Kuba
    Commented Feb 12, 2015 at 14:37

1 Answer 1

4
$\begingroup$

You can use ListConvolve or ListCorrelate, like this:

ListConvolve[
{{1, 1, 1},
 {1, 0, 1},
 {1, 1, 1}}, mat]
$\endgroup$
3
  • $\begingroup$ And in the case that the function is not Plus? For example, times? $\endgroup$
    – Dargor
    Commented Feb 12, 2015 at 15:30
  • $\begingroup$ @PabloGalindoSalgado Did you check the documentation links I posted? The answer is right there. $\endgroup$
    – Szabolcs
    Commented Feb 12, 2015 at 15:39
  • $\begingroup$ Oh, you are right. So so sorry. Thank you so much! $\endgroup$
    – Dargor
    Commented Feb 12, 2015 at 15: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.