Skip to main content
 首页 » 编程设计

python之基于列值和变量合成一个 numpy 数组/矩阵

2025年05月04日16kevingrace

我正在玩 NumPy和 Scipy我无法在文档中找到某个功能。因此,我想知道是否有人可以提供帮助。

假设我在 NumPy 中有一个数组有两列和 k行。一列用作数字指示符(例如 2 = male 、 1 = female 、 0 = unknown ),而第二列可能是 list值或分数。

假设我想找到指标为 0 的所有行的值的标准差(可以是均值或其他任何值,我只想应用一个函数),然后是 1,最后是 2。

是否有一个预定义的函数可以帮我合成这个?

在R , 等效项可以在 plyr 中找到包裹。是否NumPy和/或 Scipy有一个等价物,还是我坚持为这个数组创建一个掩码,然后以某种方式过滤这个掩码,然后应用我的函数?

一如既往,感谢您的帮助!

请您参考如下方法:

如果我理解你的描述,你有一个类似这样的数据集:

In [79]: x=np.random.randint(0,3,size=100) 
 
In [80]: y=np.random.randint(0,100,size=100) 
 
In [81]: d=np.vstack([x,y]).T 
 
In [88]: print d[:5,:] 
[[ 0 43] 
 [ 1 60] 
 [ 2 60] 
 [ 1  4] 
 [ 0 30]] 

在这种情况下,numpy.unique 可用于生成唯一“键”值数组:

In [82]: idx=np.unique(d[:,0]) 
 
In [83]: print idx 
[0 1 2] 

以及那些用于驱动生成器表达式的值,如下所示:

[113]: g=(d[np.where(d[:,0]==val),1].std() for val in idx) 

生成器 g 将发出 d 中与索引中每个条目匹配的所有条目的标准差。 numpy.fromiterator 然后可以用来收集结果:

In [114]: print np.vstack([idx,np.fromiter(g,dtype=np.float)]).T 
[[  0.          26.87376385] 
 [  1.          29.41046084] 
 [  2.          24.2477246 ]] 

请注意,在堆叠期间的最后一步中,键转换为 float ,根据您的数据,您可能不希望这样做,但我这样做只是为了说明目的,以便发布一个“漂亮”的最终结果。