如何使np.argsort将空字符串放在数组的结尾而不是开头

问题描述 投票:1回答:2

老实说,这个问题没有出现在论坛上(至少从我所见),对此我感到很惊讶。无论如何,我目前正在尝试使用np.argsort以字母形式对字符串列表进行排序,其中许多为空,如下所示:

list = [ "Carrot", "Star", "Beta", "Zoro" , ""]

现在,对np.argsort(list)的任何调用都将返回以下索引数组:

[4,2,0,1,3] # => ["", "Beta", "Carrot", "Star", "Zoro"]

是否有一种方法可以指定argsort函数的顺序,以便将空字符串像这样放置在数组的末尾:

[2,0,1,3,4] # => ["Beta", "Carrot", "Star", "Zoro", ""]

任何输入将不胜感激!

python numpy sorting is-empty
2个回答
1
投票

获得所需订单的一种简单方法是使用np.roll

lst = [ "Carrot", "Star", "Beta", "Zoro" , ""]
arr = np.array(lst)
idx = np.roll(arr.argsort(),np.count_nonzero(arr))
arr[idx]
# array(['Beta', 'Carrot', 'Star', 'Zoro', ''], dtype='<U6')

1
投票

如果要使用Numpy方法,请在Numpy数组上使用它们,而不要在“普通” Python列表。

所以从生成Numpy数组开始:

lst = np.array(list)

然后:

  • np.nan更改lst中的每个空字符串,
  • 对其应用argsort(而不是原始数组)。

要做的代码是:

np.argsort(np.where(lst != '', lst, np.nan))

给出:

array([2, 0, 1, 3, 4], dtype=int64)

因此与“”相关的索引(索引4处的空字符串)在末尾,如您所愿。

© www.soinside.com 2019 - 2024. All rights reserved.