MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Problem with substitutions in SparseArray?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56945] Re: [mg56908] Re: [mg56824] Problem with substitutions in SparseArray?
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Wed, 11 May 2005 05:23:59 -0400 (EDT)
  • References: <200505070816.EAA20188@smc.vnet.net> <6d5b1cedba1e6f5bbfe7eb5fd2f511bc@mimuw.edu.pl> <200505100742.DAA08269@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Sorry, another mistake. This time I forgot to include parentheses. It 
should have been


m = SparseArray[{{a, 0}, {0, 0}}];


SparseArray @@ ({ArrayRules[m], Dimensions[m]} /.
     a -> 1);


Normal[%]


{{1, 0}, {0, 0}}

Andrzej


On 10 May 2005, at 16:42, Andrzej Kozlowski wrote:

> You are right, I was careless so here is what I should have done:
>
>
> m = SparseArray[{{a, 0}, {0, 0}}];
>
>
> SparseArray @@ {ArrayRules[m], Dimensions[m]} /. a -> 1;
>
>
> Normal[%]
>
>
> {{a, 0}, {0, 0}}
>
> Andrzej Kozlowski
>
> On 7 May 2005, at 20:16, Andrzej Kozlowski wrote:
>
>> On 7 May 2005, at 17:16, Enrico Arrigoni wrote:
>>
>>>
>>> Substitutions don't seem to work in SparseArrays
>>>
>>> try:
>>>
>>> m = SparseArray[{{a,0},{0,0}}];
>>> ms = m/.a->1.;
>>> Normal[ms]
>>>
>>> RESULT:
>>>
>>> {{a, 0}, {0, 0}}
>>>
>>
>> The reason is that SparseArrays are atoms:
>>
>>
>> m=SparseArray[{{a,0},{0,0}}];
>>
>>
>> AtomQ[m]
>>
>> True
>>
>> You cannot change the structure of atoms by applying rules to their
>> "components" because Atoms "do not have components". Compare thsi
>> with, for example
>>
>> Complex[2,3]/.(2->5)
>>
>>
>> 2+3 I
>>
>> (Please no more discussions whether complex numbers are "really" atoms
>> or not).
>>
>> To apply a rule to an atom you have to apply it to the "whole thing",
>> e.g.
>>
>>
>> (n = m /. HoldPattern[SparseArray[x__, {y__, {a}}]] :>
>>     SparseArray[x, {y, {1}}])//InputForm
>>
>>
>> SparseArray[Automatic, {2, 2}, 0, {1, {{0, 1, 1}, {{1}}},
>>   {1}}]
>>
>>
>> This is of course not very convenient, but fortunately there is an
>> easy way to do the same thing:
>>
>> n=SparseArray[ArrayRules[m]/.a->1]//InputForm
>>
>>
>> SparseArray[Automatic, {1, 1}, 0, {1, {{0, 1}, {{1}}},
>>   {1}}]
>>
>>
>> Andrzej Kozlowski
>> Chiba, Japan
>> http://www.akikoz.net/andrzej/index.html
>> http://www.mimuw.edu.pl/~akoz/
>>
>


  • Prev by Date: NIntegrate-FindRoot acting up in version 5.1
  • Next by Date: Re: Hexagonal Spiral
  • Previous by thread: Re: Problem with substitutions in SparseArray?
  • Next by thread: System for Mathematica