[Go to BBS]
All articles in a thread
SubjectTransposeについて
Article No1156
Date: 2014/02/26(Wed) 14:31:58
Contributor清宮裕史
広島大学の清宮です。

Transposeを使った場合、以下のようにTranspose内のリスト(a,bなど)まで変化するようですが、これは仕様でしょうか。
Threadで計算すると、変化しないようです。
よろしくお願い致します。

Design orbit length = 1.0000000000000000

a={0.1,0.2,0.3};
b={1,2,3};
num={10,20,30};
list=Transpose[{a,b,num}];

a
Out[1]:= {.1,1,10}
b
Out[2]:= {.2,2,20}
num
Out[3]:= {.3,3,30}
list
Out[4]:= {{.1,1,10},{.2,2,20},{.3,3,30}}
stop;

SubjectRe: Transposeについて
Article No1157
Date: 2014/02/26(Wed) 18:22:27
ContributorAnonymous
> 広島大学の清宮です。
>
> Transposeを使った場合、以下のようにTranspose内のリスト(a,bなど)まで変化するようですが、これは仕様でしょうか。
> Threadで計算すると、変化しないようです。
> よろしくお願い致します。
>
> Design orbit length = 1.0000000000000000
>
> a={0.1,0.2,0.3};
> b={1,2,3};
> num={10,20,30};
> list=Transpose[{a,b,num}];
>
> a
> Out[1]:= {.1,1,10}
> b
> Out[2]:= {.2,2,20}
> num
> Out[3]:= {.3,3,30}
> list
> Out[4]:= {{.1,1,10},{.2,2,20},{.3,3,30}}
> stop;
>
tftranspose@src/tfdot.fの実装バグ

実正方行列の一時オブジェクトを受け取った際に、新規にオブジェクトを割り当てずに受け取った
一時オブジェクトを書き換えて返すメモリ割り当て最適化が仕込まれているが、判定条件が誤爆している

当該ケースでは、List {a,b,num}は一時オブジェクトであるが、第2レベルはシンボル参照 a, b, numを持つ
Listオブジェクトの参照であるので、第2レベルの実数リストオブジェクトは再利用出来ない(第1レベルのリストは再利用可能)
しかし、再利用判定では、第1レベルのリストの属性のみを検査している

k64-1-6 branchに関しては、オブジェクトオペレータ書き換え時に一時オブジェクト再利用最適化が脱最適化されているので影響無し

Solution:
A. 真面目に再利用判定条件を実装する
B. 脱最適化する

SubjectRe^2: Transposeについて
Article No1158
Date: 2014/02/26(Wed) 18:38:57
Contributor清宮裕史
> > 広島大学の清宮です。
> >
> > Transposeを使った場合、以下のようにTranspose内のリスト(a,bなど)まで変化するようですが、これは仕様でしょうか。
> > Threadで計算すると、変化しないようです。
> > よろしくお願い致します。
> >
> > Design orbit length = 1.0000000000000000
> >
> > a={0.1,0.2,0.3};
> > b={1,2,3};
> > num={10,20,30};
> > list=Transpose[{a,b,num}];
> >
> > a
> > Out[1]:= {.1,1,10}
> > b
> > Out[2]:= {.2,2,20}
> > num
> > Out[3]:= {.3,3,30}
> > list
> > Out[4]:= {{.1,1,10},{.2,2,20},{.3,3,30}}
> > stop;
> >
> tftranspose@src/tfdot.fの実装バグ
>
> 実正方行列の一時オブジェクトを受け取った際に、新規にオブジェクトを割り当てずに受け取った
> 一時オブジェクトを書き換えて返すメモリ割り当て最適化が仕込まれているが、判定条件が誤爆している
>
> 当該ケースでは、List {a,b,num}は一時オブジェクトであるが、第2レベルはシンボル参照 a, b, numを持つ
> Listオブジェクトの参照であるので、第2レベルの実数リストオブジェクトは再利用出来ない(第1レベルのリストは再利用可能)
> しかし、再利用判定では、第1レベルのリストの属性のみを検査している
>
> k64-1-6 branchに関しては、オブジェクトオペレータ書き換え時に一時オブジェクト再利用最適化が脱最適化されているので影響無し
>
> Solution:
> A. 真面目に再利用判定条件を実装する
> B. 脱最適化する

ありがとうございます。脱最適化しようと思います。