注意:我正在使用Python和numpy数组。
我有很多都有两列和多行的数组。第二列中有一些NaN值;第一列只有数字。
我想根据第二列以升序对每个数组进行排序,而忽略了NaN值。这是一个很大的数据集,因此我宁愿不必将NaN值转换为零或其他值。
我想要这样排序:
105. 4.
22. 10.
104. 26.
...
...
...
53. 520.
745. 902.
184. nan
19. nan
首先,我尝试使用fix_invalid
它将NaN转换为1x10^20
:
#data.txt has one of the arrays with 2 columns and a bunch of rows.
Data_0_30 = array(genfromtxt(fname='data.txt'))
g = open("iblah.txt", "a") #saves to file
def Sorted_i_M_W(mass):
masked = ma.fix_invalid(mass)
print >> g, array(sorted(masked, key=itemgetter(1)))
Sorted_i_M_W(Data_0_30)
g.close()
或者我将函数替换为如下形式:
def Sorted_i_M_W(mass):
sortedmass = sorted( mass, key=itemgetter(1))
print >> g, array(sortedmass)
对于每次尝试,我都会得到类似以下内容:
...
[ 4.46800000e+03 1.61472200e+11]
[ 3.72700000e+03 1.74166300e+11]
[ 4.91800000e+03 1.75502300e+11]
[ 6.43500000e+03 nan]
[ 3.95520000e+04 8.38907500e+09]
[ 3.63750000e+04 1.27625700e+10]
[ 2.08810000e+04 1.28578500e+10]
...
在NaN值所在的位置,重新开始排序。
(对于fix_invalid
上面摘录中的NaN,显示一个1.00000000e+20
值)。但我希望排序完全忽略NaN值。
用我想要的方式对数组进行排序的最简单方法是什么?
不知道是否可以使用完成此操作numpy.sort
,但是您可以确定使用numpy.argsort
:
>>> arr
array([[ 105., 4.],
[ 53., 520.],
[ 745., 902.],
[ 19., nan],
[ 184., nan],
[ 22., 10.],
[ 104., 26.]])
>>> arr[np.argsort(arr[:,1])]
array([[ 105., 4.],
[ 22., 10.],
[ 104., 26.],
[ 53., 520.],
[ 745., 902.],
[ 19., nan],
[ 184., nan]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句