选择特定元素并使用 numpy 找到它们的中位数
Selecting specific elements and finding their median using numpy
我有以下三个数据集
- 2 3
- 4 5
- 6 6
- 5 7
- 7 4
- 9 9
- 1 8
- 2 3
- 3 2
基本上,我想创建一个列,其中的元素将是第二列相应元素的中值。每个集合的第二列的第一个元素是(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)
收到以下错误:(索引错误:数组的索引过多)
任何建议都意义重大。
对第二列进行切片并沿适当的轴使用 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]
因此,如果您有数组作为输入,请使用第一种方法以提高效率,否则后两种方法与 arrays/lists 一样有效。
样本运行-
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)
我有以下三个数据集
- 2 3
- 4 5
- 6 6
- 5 7
- 7 4
- 9 9
- 1 8
- 2 3
- 3 2
基本上,我想创建一个列,其中的元素将是第二列相应元素的中值。每个集合的第二列的第一个元素是(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)
收到以下错误:(索引错误:数组的索引过多)
任何建议都意义重大。
对第二列进行切片并沿适当的轴使用 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]
因此,如果您有数组作为输入,请使用第一种方法以提高效率,否则后两种方法与 arrays/lists 一样有效。
样本运行-
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)