Python+Numpyを使っているときと,Juliaを使っているときで,間違ってやばいコードになることが多く(というか動かない)最近悩んでいる件を書きました.誰かいいアイデアを教えてください.
Python + numpyの場合
- Anaconda 4.3.0 (64-bit), Python 3.6.0, IPython 5.1.0で試しました
import numpy as np
X = np.array([[1, 2, 3], [4, 5, 6]])
# X = np.matrix([[1, 2, 3], [4, 5, 6]]) でもだいたい同じ
for elem in X: print(elem)
# 出力
# [1 2 3] (matrixの場合は [[1 2 3]])
# [4 5 6] (matrixの場合は [[4 5 6]])
- 慣れているのでこうなってほしい.
Juliaの場合
- Julia 0.5.0で試しました
X = [1 2 3; 4 5 6]
# 出力
# 2x3 Array{Int64, 2}:
# 1 2 3
# 4 5 6
for elem in X; println(elem); end
# 出力
# 1
# 4
# 2
# 5
# 3
# 6
- 個人的にはこのiterationがあまり直感に合わない(Python/Numpy脳とも言える)のでなんとかしたい.
- 元々JuliaはRowかColumnのどっちかのイテレーションが遅いとかなんとか(詳細は知らない)
- 死にそうな気分で次のようなコードを量産した
X = [1 2 3; 4 5 6]
m, n = size(X)
for i=1:m; println(X[i, :]); end
# 出力
- 一応動く
- 嫌な理由: 気分
調べたこと
一応いろんな議論されている(イマイチ古いけど).
-
http://stackoverflow.com/questions/21778374/what-is-the-recommended-way-to-iterate-a-matrix-over-rows
- 上の解決法と同じ
-
https://github.com/JuliaLang/julia/issues/14491
- iteratorを自分で定義する(良さそう,でも面倒)
-
https://github.com/gasagna/ArraySlices.jl
- インストールしたら使えるかも(未検証)
-
http://pkg.julialang.org/
- 一応公式パッケージ眺めてみたけど,特に公式にはなさそう?