1

RI から、次のようなインデックスを使用して単純な値をマトリックスに割り当てるために使用されます。

> mat <- matrix(NA,2,3)
> mat
     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA
> mat[1,2] <- 12
> mat
     [,1] [,2] [,3]
[1,]   NA   12   NA
[2,]   NA   NA   NA
> 

現在、Python でいくつかのスクリプトを実行する必要があり、2D マトリックスでも値を収集したいと考えています。マトリックスには列名と行名が必要であり、インデックスを介してそれらにアクセスしたいと考えています。これまでのところ、次の 2 つの方法を考えました。

  • RPy を使用して、R で慣れている方法で実行しますが、インデックス作成コマンドが RPy でどのように機能するかはまだわかりません。

お気に入り:

import rpy2.robjects as robjects

names = ['A','B','C']
dimnames = robjects.r['list'](names,names) 
mat = robjects.r['matrix'](NA, nrow = len(names), ncol=len(names), dimnames = dimnames)

# and here how to index and assign e.g. the value 12 to the cell mat["A","B"]??
  • または、Python ネイティブ NumPy 配列を使用すると、よりクリーンなソリューションになる可能性があります。現時点では、名前リストを使用してマトリックス/配列を作成する方法と、後でインデックスを使用して値を割り当てる方法がわかりません。

助言がありますか?

ありがとうございました!!

4

2 に答える 2

3

pandas のDataFrame データ型が適していると思います。

import pandas
matrix = pandas.DataFrame(index=['a','b','c'], columns=['one','two'])

戻り値

   one  two
a  NaN  NaN
b  NaN  NaN
c  NaN  NaN

エントリを変更できます: matrix['one']['a']=1、および他の使い慣れた numpy 操作 (上記のリンクで説明されているように) を変更できます。

于 2012-08-24T10:32:09.723 に答える
0

辞書を使用して、行/列の名前をインデックスにマップできます。

names = ['A', 'B', 'C']
idx = range(0, len(names))
d = dict((key, value) for (key, value) in zip(names, idx))

次に、それを使用してマトリックス内の要素にアクセスし、

mat[d['A'], d['B']] = 12

rpy2のドキュメントからわかる限り、それはうまくいくはずです。そうでない場合は、おそらく次の構文がより適切です。

mat.rx(d('A'), d('B'))
于 2012-08-24T10:33:01.520 に答える