Python 通过索引在矩阵中赋值

Python 通过索引在矩阵中赋值,python,arrays,r,numpy,rpy2,Python,Arrays,R,Numpy,Rpy2,从R开始,我被用来给矩阵赋值 通过使用索引,例如: > 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原生NumPy数组,这可能是一

从R开始,我被用来给矩阵赋值 通过使用索引,例如:

> 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原生NumPy数组,这可能是一个更干净的解决方案。目前,我只是不知道如何使用名称列表创建矩阵/数组,以及如何在之后使用索引赋值
有什么建议吗

谢谢

我想,这个可能是给你的

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

   one  two
a  NaN  NaN
b  NaN  NaN
c  NaN  NaN

您可以更改条目:
矩阵['one']['a']=1
,以及其他熟悉的numpy操作(如中所述)。

您可以使用字典将行/列名映射到索引中

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'))

你是说这是一个字符数组吗?如果没有,请使用
NA
not
“NA”
。当然,您是对的,这应该是NAI。我怀疑您需要
robjects。在python代码not
NA
中使用nau Real
。到目前为止,它工作得很好。使用pandas.dataframe(index=names,columns=names)可以很容易地从其列和行名创建数据框,其中名称指的是python名称列表。@Johannes很高兴您喜欢它,我刚刚开始使用它(昨晚找到了它),所以我不知道您可以这样做!:)
mat.rx(d('A'), d('B'))