选择特定元素并使用 numpy 找到它们的中位数

Selecting specific elements and finding their median using numpy

我有以下三个数据集

  1. 2 3
  2. 4 5
  3. 6 6

  1. 5 7
  2. 7 4
  3. 9 9

  1. 1 8
  2. 2 3
  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)