【JS,PHP,Python】スクリプト,バカロワイヤル32【Perl,Ruby】 >>848 これ、クラスターが空になったらどうするの?
空のクラスタは中心が原点になってるように見えるけど
レスからJS厨のレベルの低さを察してやれよ…
>>951 調べる必要ない。上から読み下せばわかるから
調べなければいけないと言い張るなら例を示せ
そろそろコード頼むわ… 飢えてきた…
>>954 上から読み下していくのは調べるのとどう違うんだ
>>955 待て、朝になったらコード書ける方のJS厨が来るらしいぞ
それまでスレが持つか分からんが
>>952 meanでnanが返ってくる
でも、変数msはargminで使われてるだけだから、全体がnanに汚染される事は無い
本当はargminじゃなくてnanargminを使った方が良いけど、
そもそも御題のリンク先を見てもクラスタが縮退したケースについて何も書いて無いから
プログラマ観点でいえば、その場合は未定義
>>956 なんの積極性も苦労も混乱も生じない
お前がびびりまくってるコードを見せてくれ
結局ライブラリの違いだよな。 どうせnumpy.jsがあればJSでも同じように書けるんでしょ。
あるの?ライブラリが貧弱な言語は流行らないだろ
JavaScriptはインデックス演算子のオーバーロードができないからお話にならない
あらら
Javascriptってインデックス演算子どころか四則演算もオーバーロードできないだろ? 論外だからnumpyがあったら〜とか言わない方が良いよ
数値計算はインデックスを多用するからな pythonのインデックス指定は非常に強力で、numpyでもフルに活用できる その点においてjavascriptはFortranにすら劣る
演算子のオーバーロードなんてちょっと記述が簡潔になるだけじゃないのか? そんなに論外なのか?
+-とかはどうでもいいけど インデックスの範囲指定を使ったループの省略は行列操作をやる上で結構便利だよ
おお、
>>837 面白そうだな
確かにJavascriptはちょっと長くなるだろうが
Pythonはリスト内包でジェネレータが書けるのもポイント どっかのコーヒーと違ってメモリ食わない
今日はまだ予定ないから、ちょっくら書いてみるわ クラスタリングとか懐かしいな
やっぱ結構複雑だな
var _ = require('underscore'); var sy = require('sylvester'); function kMeans(data, K) { var xs, mean, ds, i, j, k, d, x ,sum, min, minIndex, ZERO; ZERO = $V(newArray(data[0].elements.length, 0)); xs = newArray(K, []); for(i = data.length; i--; xs[i % K].push(data[i])); console.log(xs); do { newXs = newArray(K, []); mean = newArray(K, 0); for(i = K; i--; ) { for (sum = ZERO, j = xs[i].length; j--; sum = sum.add(xs[i][j])); mean[i] = sum.x(1 / xs[i].length); } for(i = K; i--; ) { for(j = xs[i].length; j--; ) { var x = xs[i][j]; for(k = K, minIndex = k - 1, min = mean[k - 1].distanceFrom(x); k--; ) { d = mean[k].distanceFrom(x); if (d < min) { minIndex = k; min = d; } } newXs[minIndex].push(x); } } } while (!isEqual(xs, newXs) && (xs = newXs)) return xs; }
function newArray(n, e) { for(var r = [], i = n; i--; e.slice ? r.push(e.slice()) : r.push(e)); return r; } function isEqual(l, r) { var i, j; if (l.length !== r.length) return false; for(i = l.length; i--; ) { if (l[i].length !== r[i].length) return false; for(j = l[i].length; j--; ) if (!contains(l[i], r[i][j])) return false; } return true; } function contains(l, e) { for(i = l.length; i--; ) { if (_.isEqual(l[i], e)) return true; } return false; }
せっかく書いてくれたのに批判的なことを書くのは心苦しいけど、 正直これならCで書くレベル
まあcでも別に良いと思うが どっちでも慣れてる人なら大丈夫だろう
どっちでもいいならCで書くわな CommonJSに比べたらまだCの標準ライブラリの方が使いやすいし
>>848 は実際もう少し短く書けるし、Pythonとの差は大きいね
from numpy import *
def kmeans(data, K):
xs, ys = random.randint(0, K, len(data)), zeros(len(data))
while not allclose(xs, ys):
ms = array([data[xs == k].mean(axis=0) for k in arange(K)])
xs, ys = array([nanargmin([linalg.norm(x - m) for m in ms])
for x in data]), xs
return xs
975が良いことを言った コードを書かせるのは心苦しい 書かせれば万事解決すると予想していたのなら尚更
いや、問題は解決はしたよ 実際のコードではJSのほうが圧倒的に可読性が低く冗長だと明らかになった
981 :
デフォルトの名無しさん :2013/05/03(金) 09:51:34.71
心配しなくてもいいぞ わりと楽だったからw まあforで直接ロジック書いてるからpythonより長いけど 決まり文句的なところがあるし言うほど大変でもない
ちなみに俺Pythonが何やってるのか分からないんだが これ、可読性が高いのか?
ちなみに俺はK平均法というもの自体がわからないんだが(住民代表)
確かにw
初期値としてランダムにクラスタを割り振り、 ループ内で各クラスタの中心を求めて、中心に最も近いクラスタに割り当て直す クラスタの割り当てが変更されなかったらループ終了 ロジックがそのまま記述されてるから、凄く分かりやすい
>>985 しかし現実は
「allclose?mean?axis?arrayで囲ってる?xsとys交換してから比較?linalg?norm?」
Pythonのコードは知的教養レベルが高い人が抽象的な言葉でわけのわからん議論をしてるのに
似てるw
ただ、その割には他の言語でもたいして大変じゃないんだよなあ
>>986 お前はコード書いた
>>973 >>974 じゃなくて、コード書けない方のJS厨だろw
自分は書けなくて逃げてたくせに、書ける奴が現れたら
> ただ、その割には他の言語でもたいして大変じゃないんだよなあ
って恥を知れ馬鹿ww
>>987 俺はそんな暇人じゃないんでね
お前こそコード書いてないくせに偉そうに
while文と内包表記を混ぜないでどっちかに統一すればいいんじゃないかね
こうなってくると、C言語とHaskell見たいな
>>986 Python(numpy, scipy)は知的教養レベルが高い人が使うもので、
Javascriptは底辺Webドカタが使うものってことだね
数式だって分かる人には読みやすいが、馬鹿には暗号になってしまうし
人に因って可読性が違うのは仕方ない
>>985 ,990
おまいらありがとう。たぶんわかった
K=2 ならある類似性を持ったクラスタ 1 に属する要素と
クラスタ 2 に属する要素に分類するわけね
>>992 これは有り難い
でも最初にこれ見ちゃってたら自分で考えようとしなかっただろうな
>>993 せいぜいイディオム勉強してPythonの知的教養レベル上げて満足してろよw
俺は暇人じゃないんで、そんなバッドノウハウいらんし、
応用が効いて分かりやすいJSでいいわw
意外とcやjavascriptのベタベタな古臭いコードで何とかなるもんだな。
997 :
デフォルトの名無しさん :2013/05/03(金) 11:28:27.35
とりあえず埋めときますね
>>994 >でも最初にこれ見ちゃってたら自分で考えようとしなかっただろうな
同意
既にモチベーション無くした
リスト内包は集合論とかの数式を見慣れた人には分かりやすいよね
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。