更改numpy数组中字符串的位置

2024-10-02 22:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含字符串的numpy数组。你知道吗

index1 = ['level4','level3','level2','UNKNOWN','level1'] 

我想排列这个numpy数组,使'UNKNOWN'始终是数组中的第一个字符串。你知道吗

所需阵列:

index1 = ['UNKNOWN','level4','level3','level2','level1']

级别排序是不可取的


Tags: 字符串numpy排序数组级别unknownlevel3level2
3条回答

您可以使用np.roll

import numpy as np

index1 = np.array(['level4','level3','level2','UNKNOWN','level1'])

position = np.where(index1 == 'UNKNOWN')[0][0]
index1[:position + 1] = np.roll(index1[:position + 1], 1)
print(index1)

array(['UNKNOWN', 'level4', 'level3', 'level2', 'level1'], dtype='<U7')

partition()将允许对数组重新排序,但会被排序。你知道吗

index1.partition(np.where(index1=='UNKNOWN')[0][0])

最简单的答案

如果您真的只想'UNKNOWN'在前面,那么最简单、计算效率最高的方法就是将它与第0个元素交换:

index1 = np.array(['level4','level3','level2','UNKNOWN','level1'])
# find the index of 'UNKNOWN'
ix = np.flatnonzero(index1 == 'UNKNOWN')[0]
# swap values
index1[[0, ix]] = index1[[ix, 0]]

print(index1)
# output:
#    ['UNKNOWN' 'level3' 'level2' 'level4' 'level1']

保持level元素的原始顺序

如果您希望level元素在输出中的顺序与在输入中的顺序相同,那么下面有一种方法(稍微复杂一些,但仍然非常简单):

index1 = np.array(['level4','level3','level2','UNKNOWN','level1'])
# find the index of 'UNKNOWN'
ix = np.flatnonzero(index1 == 'UNKNOWN')[0]
# shift values
u = index1[ix]
index1[1:ix + 1] = index1[:ix]
index1[0] = u

print(index1)
# output:
#    ['UNKNOWN' 'level4' 'level3' 'level2' 'level1']

不要使用partition

如果不希望对结果进行排序,则不应使用^{}

index1 = np.array(['level4','level3','level2','UNKNOWN','level1'])
index1.partition(np.flatnonzero(index1 == 'UNKNOWN'))

print(index1)
# output:
#     ['UNKNOWN' 'level1' 'level2' 'level3' 'level4']

相关问题 更多 >