Hallo,
Mathematica verwendet Part[] in lesenden und schreibenden
Aufrufen anders. Beim lesenden Aufruf ist das Ergebnis von
b[[1]][[1]] und b[[1,1]]
equivalent, ersteres ist
Part[Part[b,1],1]
letzteres ist
Part[b,1,1]
Part[Part[b,1],1] nimmt zuerst die erste Zeile von b und
erzeugt eine *Kopie* dieser ersten Zeile, aus der dann
der zweite Part[copyOfRow1OfB,1] das erste Element heraus
holt. Deshalb dauert
b = Table[Random[], {100}, {100000}];
Timing[Table[b[[1]][[1]], {1000}]] // First
auch l"anger als
Timing[Table[b[[1, 1]], {1000}]] // First
Bei einer Zuweisung, wie
b[[1]][[1]]=1
wird auch eine Kopie der ersten Zeile von b
erzeugt, der man aber nichts zuweisen kann
weil es eben eine Kopie ist.
Beim Zuweisen *muss* man also die b[[1,1]] Variante
nehmen damit nichts kopiert wird
und Part[] auf den Speicher des Originals
zugreift.
Gruss
Jens
"Veltman, A.T." wrote:
>
> Sowwy, immer noch mit Mathematica 3.0,
> hab aber folgendes Problem:
>
> Folgendes functioniert:
>
> In[1]:= a = Table[0, {2}]
> Out[1]= {0,0}
>
> In[2]:= a[[1]] = 1
> Out[2]= 1
>
> In[3]:= b = Table[0, {2}, {3}]
> Out[3]= {{0, 0, 0}, {0, 0, 0}}
>
> Aber wenn Ich versuche
>
> In[4]:= b[[1]][[1]] = 2
>
> sagt er (mathematica):
>
> Set::setps: b[[1]] in assignment of part is not a symbol.
> Out[4]= 2
>
> und er verweigert sich das Element an zu passen:
>
> In[5]:= b[[1]][[2]]
> Out[5]= 0
>
> Wie kann Ich doch, ohne viel Mühe, die Werte im Matrix b anpassen?
>
> danke,
>
> arie veltman
>
> ============================================
> * Ir. A.T. Veltman
> * Energy research Centre of the Netherlands ECN
> * Technological Services & Consultancy
> * Postbus 1, 1755 ZG Petten, The Netherlands
> * Tel (+31) (0)224 564556, Fax (+31) (0)224 568407
> * veltman@XXXXXXX.nl
> * www.ecn.nl
> ============================================
> DISCLAIMER:
>
> The information contained in this communication is confidential and may be
> legally privileged. It is intended solely for the use of the individual or
> entity to whom it is addressed and others authorised to receive it. If you
> are not the intended recipient you are hereby notified that any disclosure,
> copying, distribution or taking any action in reliance of the contents of
> this information is strictly prohibited and may be unlawful. ECN is neither
> liable for the proper nor complete transmission of the information contained
> in this communication nor for any delay in its receipt.