我有以下三个数据集。
基本上,我想创建一个列,其中元素将是第二列的相应元素的中值。每组的第二列的第一个元素是(3,7,8)和中位数= 7,第二列数据集的第二个元素是(5,4,3)和中位数= 4和第三个元素第二列数据集的数据是(6,9,2),中位数= 6。所以我希望我的输出是像[(7,4,6)]那样的numpy数组。
我尝试了以下方法:
import numpy as np
filelist=[]
for i in range (1,4):
filelist.append("/Users/Hrihaan/Desktop/A_%s.txt" %i)
for fname in filelist:
data=np.loadtxt(fname)
x=data[:,1]
for j in range (0,3):
y=np.median(x[j,1]) # tried this method and thought would get the arrays i want (3,7,8) , (5,4,3) and (6,9,2) and their medians
print(y)
收到以下错误:( IndexError:数组索引太多)
任何建议都意味着很多。
答案 0 :(得分:1)
切割第二列并沿适当的轴使用np.median
-
np.median([a[:,1],b[:,1],c[:,1]],axis=0)
或者作为数组包装,然后切片并最终使用np.median
-
np.median(np.asarray([a,b,c])[...,1], axis=0)
或者使用np.median
,这将负责转换到引擎盖下的数组,然后切片 -
np.median([a,b,c],axis=0)[:,1]
因此,如果您将数组作为输入,请使用第一种方法来提高效率,否则后两种方法与数组/列表一样。
示例运行 -
In [10]: a = np.array([[2,3],[4,5],[5,6]])
...: b = np.array([[5,7],[7,4],[9,9]])
...: c = np.array([[1,8],[2,3],[3,2]])
...:
In [11]: np.median([a[:,1],b[:,1],c[:,1]],axis=0)
Out[11]: array([ 7., 4., 6.])
使其与问题中的已发布代码一起使用:
# Grab filenames
filelist=[]
for i in range (1,4):
filelist.append("/Users/Hrihaan/Desktop/A_%s.txt" %i)
# Grab second columns off each
data_list = []
for fname in filelist:
data=np.loadtxt(fname)
data_list.append(data[:,1])
desired_output = np.median(data_list,axis=0)