質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1982閲覧

Pythonについての質問です(pyperについて)

gopan

総合スコア19

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/12/06 10:37

###前提・実現したいこと
下記のコードではrpy2によってPythonからRを呼び出しているのですが、自分はpyperによってRを呼び出したいと考えています。
しかし色々調べたのですが、PythonもRについても最近勉強し始めた自分にはどこをどのように変更すれば良いのか分かりませんでした。
そこで、変更点などを具体的に分かる方どうか教えていただけないでしょうか?
ちなみに正常に動作すれば「emd = 160.542762808」と出力されると思います。
どうかよろしくお願いします。

###該当のソースコード

python

1#coding:utf-8 2import numpy as np 3import rpy2.robjects as robjects 4 5# Rのlp.transport()をインポート 6robjects.r['library']('lpSolve') 7transport = robjects.r['lp.transport'] 8 9def euclid_dist(feature1, feature2): 10 """ユークリッド距離を計算""" 11 if len(feature1) != len(feature2): 12 print "ERROR: calc euclid_dist: %d <=> %d" % (len(feature1), len(feature2)) 13 return -1 14 return np.sqrt(np.sum((feature1 - feature2) ** 2)) 15 16def emd(dist, w1, w2): 17 """Rのtransport()関数を使ってEMDを計算""" 18 # transport()の引数を用意 19 costs = robjects.r['matrix'](robjects.FloatVector(dist), 20 nrow=len(w1), ncol=len(w2), 21 byrow=True) 22 row_signs = ["<"] * len(w1) 23 row_rhs = robjects.FloatVector(w1) 24 col_signs = [">"] * len(w2) 25 col_rhs = robjects.FloatVector(w2) 26 27 t = transport(costs, "min", row_signs, row_rhs, col_signs, col_rhs) 28 flow = t.rx2('solution') 29 30 dist = dist.reshape(len(w1), len(w2)) 31 flow = np.array(flow) 32 work = np.sum(flow * dist) 33 emd = work / np.sum(flow) 34 return emd 35 36if __name__ == "__main__": 37 f1 = np.array([ [100, 40, 22], [211, 20, 2], [32, 190, 150], [2, 100, 100] ]) 38 f2 = np.array([ [0, 0, 0], [50, 100, 80], [255, 255, 255] ]) 39 40 # 重みは自然数のみ 41 w1 = np.array([4, 3, 2, 1]) 42 w2 = np.array([5, 3, 2]) 43 44 n1 = len(f1) 45 n2 = len(f2) 46 47 # 距離行列を作成 48 dist = np.zeros(n1 * n2) 49 for i in range(n1): 50 for j in range(n2): 51 dist[i * n2 + j] = euclid_dist(f1[i], f2[j]) 52 53 # 距離行列と重みからEMDを計算 54 print "emd =", emd(dist, w1, w2)

###補足情報(言語/FW/ツール等のバージョンなど)
Windows10
Python2.7
R3.3.2
pyper-1.1.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

この質問への回答で、あなたの課題を解決するために読むべきと思われるものは説明しましたが、読んだのですか。

何度も同じ趣旨の質問を繰り返しておられますが、即物的にプログラムの変更箇所を聞くのではなく、(過去の回答も参考に) 自分なりに考えてわからなかったことを質問しないと、回答をもらっても役立てられないのではないかと思いますが。

投稿2016/12/06 10:53

ikedas

総合スコア4333

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問