【JS,PHP,Python】スクリプト,バカロワイヤル32【Perl,Ruby】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2013/05/03(金) 00:03:16.23
>>848
これ、クラスターが空になったらどうするの?
空のクラスタは中心が原点になってるように見えるけど
953デフォルトの名無しさん:2013/05/03(金) 00:03:54.46
レスからJS厨のレベルの低さを察してやれよ…
954デフォルトの名無しさん:2013/05/03(金) 00:06:03.73
>>951
調べる必要ない。上から読み下せばわかるから
調べなければいけないと言い張るなら例を示せ
955デフォルトの名無しさん:2013/05/03(金) 00:09:57.67
そろそろコード頼むわ…
飢えてきた…
956デフォルトの名無しさん:2013/05/03(金) 00:12:37.67
>>954
上から読み下していくのは調べるのとどう違うんだ
957デフォルトの名無しさん:2013/05/03(金) 00:18:54.28
>>955
待て、朝になったらコード書ける方のJS厨が来るらしいぞ
それまでスレが持つか分からんが
958デフォルトの名無しさん:2013/05/03(金) 00:31:11.25
>>952
meanでnanが返ってくる
でも、変数msはargminで使われてるだけだから、全体がnanに汚染される事は無い
本当はargminじゃなくてnanargminを使った方が良いけど、
そもそも御題のリンク先を見てもクラスタが縮退したケースについて何も書いて無いから
プログラマ観点でいえば、その場合は未定義
959デフォルトの名無しさん:2013/05/03(金) 00:32:05.02
>>956
なんの積極性も苦労も混乱も生じない
お前がびびりまくってるコードを見せてくれ
960デフォルトの名無しさん:2013/05/03(金) 00:39:35.50
結局ライブラリの違いだよな。
どうせnumpy.jsがあればJSでも同じように書けるんでしょ。
961デフォルトの名無しさん:2013/05/03(金) 00:41:14.53
あるの?ライブラリが貧弱な言語は流行らないだろ
962デフォルトの名無しさん:2013/05/03(金) 00:42:10.06
JavaScriptはインデックス演算子のオーバーロードができないからお話にならない
963デフォルトの名無しさん:2013/05/03(金) 00:45:53.96
あらら
964デフォルトの名無しさん:2013/05/03(金) 01:59:00.37
Javascriptってインデックス演算子どころか四則演算もオーバーロードできないだろ?
論外だからnumpyがあったら〜とか言わない方が良いよ
965デフォルトの名無しさん:2013/05/03(金) 07:01:17.27
数値計算はインデックスを多用するからな
pythonのインデックス指定は非常に強力で、numpyでもフルに活用できる
その点においてjavascriptはFortranにすら劣る
966デフォルトの名無しさん:2013/05/03(金) 07:22:13.57
演算子のオーバーロードなんてちょっと記述が簡潔になるだけじゃないのか?
そんなに論外なのか?
967デフォルトの名無しさん:2013/05/03(金) 07:33:25.42
+-とかはどうでもいいけど
インデックスの範囲指定を使ったループの省略は行列操作をやる上で結構便利だよ
968デフォルトの名無しさん:2013/05/03(金) 07:36:50.95
おお、>>837面白そうだな
確かにJavascriptはちょっと長くなるだろうが
969デフォルトの名無しさん:2013/05/03(金) 07:51:30.17
>>837
英語の Wikipedia の方が情報量多い。毎度のことだけど。

http://en.wikipedia.org/wiki/K-means_clustering
970デフォルトの名無しさん:2013/05/03(金) 07:53:42.01
Pythonはリスト内包でジェネレータが書けるのもポイント
どっかのコーヒーと違ってメモリ食わない
971デフォルトの名無しさん:2013/05/03(金) 07:57:42.55
今日はまだ予定ないから、ちょっくら書いてみるわ
クラスタリングとか懐かしいな
972デフォルトの名無しさん:2013/05/03(金) 09:02:10.72
やっぱ結構複雑だな
973デフォルトの名無しさん:2013/05/03(金) 09:02:50.64
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;
}
974デフォルトの名無しさん:2013/05/03(金) 09:03:27.54
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;
}
975デフォルトの名無しさん:2013/05/03(金) 09:18:28.58
せっかく書いてくれたのに批判的なことを書くのは心苦しいけど、
正直これならCで書くレベル
976デフォルトの名無しさん:2013/05/03(金) 09:21:49.68
まあcでも別に良いと思うが
どっちでも慣れてる人なら大丈夫だろう
977デフォルトの名無しさん:2013/05/03(金) 09:23:08.83
どっちでもいいならCで書くわな
CommonJSに比べたらまだCの標準ライブラリの方が使いやすいし
978デフォルトの名無しさん:2013/05/03(金) 09:35:22.94
>>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
979デフォルトの名無しさん:2013/05/03(金) 09:40:31.34
975が良いことを言った
コードを書かせるのは心苦しい
書かせれば万事解決すると予想していたのなら尚更
980デフォルトの名無しさん:2013/05/03(金) 09:51:12.05
いや、問題は解決はしたよ
実際のコードではJSのほうが圧倒的に可読性が低く冗長だと明らかになった
981デフォルトの名無しさん:2013/05/03(金) 09:51:34.71
心配しなくてもいいぞ
わりと楽だったからw
まあforで直接ロジック書いてるからpythonより長いけど
決まり文句的なところがあるし言うほど大変でもない
982デフォルトの名無しさん:2013/05/03(金) 09:57:54.58
ちなみに俺Pythonが何やってるのか分からないんだが
これ、可読性が高いのか?
983デフォルトの名無しさん:2013/05/03(金) 10:01:05.34
ちなみに俺はK平均法というもの自体がわからないんだが(住民代表)
984デフォルトの名無しさん:2013/05/03(金) 10:04:06.74
確かにw
985デフォルトの名無しさん:2013/05/03(金) 10:05:44.59
初期値としてランダムにクラスタを割り振り、
ループ内で各クラスタの中心を求めて、中心に最も近いクラスタに割り当て直す
クラスタの割り当てが変更されなかったらループ終了

ロジックがそのまま記述されてるから、凄く分かりやすい
986デフォルトの名無しさん:2013/05/03(金) 10:13:47.88
>>985
しかし現実は
「allclose?mean?axis?arrayで囲ってる?xsとys交換してから比較?linalg?norm?」
Pythonのコードは知的教養レベルが高い人が抽象的な言葉でわけのわからん議論をしてるのに
似てるw
ただ、その割には他の言語でもたいして大変じゃないんだよなあ
987デフォルトの名無しさん:2013/05/03(金) 10:19:59.17
>>986
お前はコード書いた>>973>>974じゃなくて、コード書けない方のJS厨だろw
自分は書けなくて逃げてたくせに、書ける奴が現れたら

> ただ、その割には他の言語でもたいして大変じゃないんだよなあ

って恥を知れ馬鹿ww
988デフォルトの名無しさん:2013/05/03(金) 10:25:44.59
>>987
俺はそんな暇人じゃないんでね
お前こそコード書いてないくせに偉そうに
989デフォルトの名無しさん:2013/05/03(金) 10:28:01.07
while文と内包表記を混ぜないでどっちかに統一すればいいんじゃないかね
990デフォルトの名無しさん:2013/05/03(金) 10:29:10.23
>>983
↓の「例」のところを見るとk平均法で何ができるかイメージが掴めるかも。

http://reference.wolfram.com/mathematica/ref/ClusteringComponents.html
991デフォルトの名無しさん:2013/05/03(金) 10:31:40.57
こうなってくると、C言語とHaskell見たいな
992デフォルトの名無しさん:2013/05/03(金) 10:51:32.77
993デフォルトの名無しさん:2013/05/03(金) 10:53:21.22
>>986
Python(numpy, scipy)は知的教養レベルが高い人が使うもので、
Javascriptは底辺Webドカタが使うものってことだね

数式だって分かる人には読みやすいが、馬鹿には暗号になってしまうし
人に因って可読性が違うのは仕方ない
994デフォルトの名無しさん:2013/05/03(金) 10:56:47.34
>>985,990
おまいらありがとう。たぶんわかった
K=2 ならある類似性を持ったクラスタ 1 に属する要素と
クラスタ 2 に属する要素に分類するわけね

>>992
これは有り難い
でも最初にこれ見ちゃってたら自分で考えようとしなかっただろうな
995デフォルトの名無しさん:2013/05/03(金) 11:04:22.68
>>993
せいぜいイディオム勉強してPythonの知的教養レベル上げて満足してろよw
俺は暇人じゃないんで、そんなバッドノウハウいらんし、
応用が効いて分かりやすいJSでいいわw
996デフォルトの名無しさん:2013/05/03(金) 11:14:20.22
意外とcやjavascriptのベタベタな古臭いコードで何とかなるもんだな。
997デフォルトの名無しさん:2013/05/03(金) 11:28:27.35
とりあえず埋めときますね
998デフォルトの名無しさん:2013/05/03(金) 11:29:11.51
>>994
>でも最初にこれ見ちゃってたら自分で考えようとしなかっただろうな

同意
既にモチベーション無くした
999デフォルトの名無しさん:2013/05/03(金) 11:30:19.32
リスト内包は集合論とかの数式を見慣れた人には分かりやすいよね
1000デフォルトの名無しさん:2013/05/03(金) 11:30:22.10
999
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。