Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Topic: Sparse Array Question
Replies: 2   Last Post: Apr 24, 2013 7:02 AM

 Messages: [ Previous | Next ]
 Bob Hanlon Posts: 906 Registered: 10/29/11
Re: Sparse Array Question
Posted: Apr 24, 2013 7:01 AM

myList = {{1, 1} -> 1, {2, 1} -> 2,
{1, 1} -> 3, {2, 2} -> 1, {1, 1} -> 1};

myList //.
{s___, a_ -> b_, m___, a_ -> c_, e___} ->
{s, a -> (b + c), m, e}

{{1, 1} -> 5, {2, 1} -> 2, {2, 2} -> 1}

For v3 or later (Split was new in v3)

#[[1, 1]] -> Plus @@ #[[All, -1]] & /@
Split[Sort[myList], #1[[1]] == #2[[1]] &]

{{1, 1} -> 5, {2, 1} -> 2, {2, 2} -> 1}

For v5 or later (Total was new in v5)

#[[1, 1]] -> Total[#[[All, -1]]] & /@
Split[Sort[myList], #1[[1]] == #2[[1]] &]

{{1, 1} -> 5, {2, 1} -> 2, {2, 2} -> 1}

For v7 or later (GatherBy was new in v7)

#[[1, 1]] -> Total[#[[All, -1]]] & /@
GatherBy[myList, First]

{{1, 1} -> 5, {2, 1} -> 2, {2, 2} -> 1}

Bob Hanlon

On Tue, Apr 23, 2013 at 12:04 AM, christopher arthur <
chris.arthur1@gmail.com> wrote:

> Hello,
>
> I have a list of rules for defining a SparseArray. The list has some
> coordinates repeated with different values. If a coordinate appears in
> the list more than once, I want to sum up the values, and then have a
> SparseArray
>
> i.e., if my list were myList={{1,1}->1,{2,1}->2,{1,1}->3} then my
> SparseArray should have {1,1}->4. I've tried using ReplacePart on an
> array to say myArray=ReplacePart[myArray,...] but this seems horribly
> inefficient as a way to change values in an array.
>
> I'm using Mathematica 5.2
>
> Cheers,
>
> Chris
>
>

Date Subject Author
4/24/13 Bob Hanlon
4/24/13 Sseziwa Mukasa