如何使 np.argsort 将空字符串放在数组的末尾而不是开头
How make np.argsort place empty strings at the END of an array instead of at the beginning
我真的很惊讶这个问题之前没有出现在论坛上(至少从我所看到的)。无论如何,我目前正在尝试使用 np.argsort 以字母方式对字符串列表进行排序,其中许多是空的,如下所示:
list = [ "Carrot", "Star", "Beta", "Zoro" , ""]
现在,任何对 np.argsort(list) 的调用都会 return 以下索引数组:
[4,2,0,1,3] # => ["", "Beta", "Carrot", "Star", "Zoro"]
有没有办法指定 argsort 函数的顺序,以便将空字符串放在数组的末尾,如下所示:
[2,0,1,3,4] # => ["Beta", "Carrot", "Star", "Zoro", ""]
任何输入将不胜感激!
获得所需订单的一种简单方法是使用 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')
如果你想使用 Numpy 方法,请在 Numpy 数组上使用它们,而不是在
"ordinary" Python 列表。
所以从生成一个 Numpy 数组开始,为了演示目的,
延长一点:
list = [ "Carrot", "Star", "Beta", "None", "none", "Zoro" , "", "zzz"]
lst = np.array(list)
然后:
- 更改 lst 中的每个空字符串或例如none / None 与
a 波浪号(ASCII 中的最后一个字符),
- 对其应用 argsort(而不是原始数组)。
执行此操作的代码是:
np.argsort(np.where(~np.isin(lst, ['', 'None', 'none']), lst, '~'))
给出:
array([2, 0, 1, 5, 7, 3, 4, 6], dtype=int64)
所以索引涉及:
- "None"(指数==3),
- "none"(指数==4),
- """(空字符串,索引== 6)
在最后,但是例如关于"zzz"的索引7就在他们面前
我真的很惊讶这个问题之前没有出现在论坛上(至少从我所看到的)。无论如何,我目前正在尝试使用 np.argsort 以字母方式对字符串列表进行排序,其中许多是空的,如下所示:
list = [ "Carrot", "Star", "Beta", "Zoro" , ""]
现在,任何对 np.argsort(list) 的调用都会 return 以下索引数组:
[4,2,0,1,3] # => ["", "Beta", "Carrot", "Star", "Zoro"]
有没有办法指定 argsort 函数的顺序,以便将空字符串放在数组的末尾,如下所示:
[2,0,1,3,4] # => ["Beta", "Carrot", "Star", "Zoro", ""]
任何输入将不胜感激!
获得所需订单的一种简单方法是使用 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')
如果你想使用 Numpy 方法,请在 Numpy 数组上使用它们,而不是在 "ordinary" Python 列表。
所以从生成一个 Numpy 数组开始,为了演示目的, 延长一点:
list = [ "Carrot", "Star", "Beta", "None", "none", "Zoro" , "", "zzz"]
lst = np.array(list)
然后:
- 更改 lst 中的每个空字符串或例如none / None 与 a 波浪号(ASCII 中的最后一个字符),
- 对其应用 argsort(而不是原始数组)。
执行此操作的代码是:
np.argsort(np.where(~np.isin(lst, ['', 'None', 'none']), lst, '~'))
给出:
array([2, 0, 1, 5, 7, 3, 4, 6], dtype=int64)
所以索引涉及:
- "None"(指数==3),
- "none"(指数==4),
- """(空字符串,索引== 6)
在最后,但是例如关于"zzz"的索引7就在他们面前