tuneoの日記: 線形代数に不信感 3
もちろん線形代数は大事ですよ?でもこんなトンパチなことを書かれたら眉に唾を付けたくなるのは人情ってもんじゃないですか。
一発目のサンプルコードは目を覆わんばかりにひどい。2つのシーケンスの要素同士の積からなる新しいシーケンス(アダマール積っていうんだっけ?)を作るには、というお題でPythonのべた書きとnumpy利用を比較して線形代数のメリットを示してみせたいらしいのだが、何すかこの汚いコードは。
# 2つの配列を掛ける
x = [1,2,3]
y = [2,3,4]
product = []
for i in range(len(x)):
product.append(x[i]*y[i])
# 線形代数バージョン
x = numpy.array([1,2,3])
y = numpy.array([2,3,4])
x * y
しょっぱなのコメントの「配列」という言葉にイラっとする(上記のコードで使われたのは「配列」ではなく「リスト」である。Pythonにはリスト以外に「配列」を提供するarrayってモジュールがあるので、区別はきちんとしましょう)。そしてシーケンスsの全要素を頭からなめるのにfor i in range(len(s)): s[i]なんちゃらと書く連中は滅ぼされなければならない。おまけに、こんなのリスト内包表記とzip()を使えば[_x * _y for _x, _y in zip(x, y)]一発ではないか。
もう一つ追い打ちをかけておくと、アダマール積ってのはどういう「線形代数」の問題を解決するのか?という解説がないので「そういう計算をするのにnumpyってのが使えるんですね、すごーい!たーのしー!……で、それが何?」と思うのは人として当然だと思う。
そしてとどめに上記の例でnumpyを使うメリットは「速い」ことなんだそうな。もう言葉がない。「numpy使うとアダマール積が速いんだぞ線形代数はすごいだろ!」とドヤリングされても、この文章がターゲットとしている「初学者」は何が何やらさっぱりだと思うんだけど。
線形代数とは (スコア:1)
この人の線形代数の定義が不思議。
numpyのことを線形代数と言っているのですね。
ディープラーニング業界では本当に一般的なんでしょうか。
Re:線形代数とは (スコア:1)
深層学習はトレンディ(死語)な分野ですから参入する人たちもピンキリなんでしょう。
こういうある意味凄い人は稀であってほしいのですが……。
Re:線形代数とは (スコア:1)
pythonはプログラミング初心者に向いていますし、ライブラリも豊富なので、ユーザーの裾野は広いと思いますが、その分表層的な知識だけでやっている人も多いのでしょうかね。
かく言う私も文法はめちゃくちゃだし古典的なニューラルネットワークしか実装したことがないので、人のことは全く言えないのですが。