- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个要排序的数组。有些条目是字符串,因此 numpy 将所有内容都视为字符串(包括数字)。总的来说这很好,我实际上在几个地方利用了它,但是在尝试对其进行排序时会导致一些问题。
基本上,当字符串长度不同时就会出现问题(因此,如果排序为 50、120、110,它将给出 110、120、50 而不是 50、110、120)。
下面是一个简单的例子来说明发生了什么;有谁知道如何克服这个问题(如果我可以将元素保留为字符串后排序那会很棒,但如果不能的话我也可以做到)。
import numpy as np
spam = np.array( [ [ 'Graham', 550, 29 ], [ 'John', 90, 1 ], [ 'Terry G', 450, 20 ], \
[ 'Eric', 550, 30 ], [ 'Terry J', 450, 20 ], [ 'Michael', 520, 33 ] ] )
print( "Original:\n")
print( spam )
print( "\n\nSorted:\n" )
spam = spam[ np.lexsort( ( spam[ :, 2 ], spam[ :, 1 ] ) ) ][ : : -1 ]
print( spam )
如果缺少任何信息等,请随时询问。一如既往,提前感谢您的帮助,如果这是重复的,我们深表歉意(据我所知,搜索未返回任何相关结果)。
最佳答案
为 lexsort 转换为 int 类型,然后使用这些 lex 排序的索引索引到输入数组中 -
sidx = np.lexsort(( spam[ :, 2 ].astype(int), spam[ :, 1 ].astype(int)))
# Or simply np.lexsort(spam[ :, 2:0:-1].astype(int).T)
spam_out = spam[sidx[::-1]]
sample 运行-
In [450]: spam
Out[450]:
array([['Graham', '550', '29'],
['John', '90', '1'],
['Terry G', '450', '20'],
['Eric', '550', '30'],
['Terry J', '450', '20'],
['Michael', '520', '33']],
dtype='|S7')
In [451]: sidx = np.lexsort(( spam[ :, 2 ].astype(int), spam[ :, 1 ].astype(int)))
In [452]: spam[sidx[::-1]]
Out[452]:
array([['Eric', '550', '30'],
['Graham', '550', '29'],
['Michael', '520', '33'],
['Terry J', '450', '20'],
['Terry G', '450', '20'],
['John', '90', '1']],
dtype='|S7')
关于python - 使用 lexsort(python)对基于字符串的数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42489338/
我有一些数据想要排序,但此方法使用 numpy.lexsort() data = np.zeros(shape=(n,6)) # some routine that partially populat
本文实例讲述了Python实现二维数组按照某行或列排序的方法。分享给大家供大家参考,具体如下: lexsort支持对数组按指定行或列的顺序排序;是间接排序,lexsort不修改原数组,返回索引。
我有一个带有 x 列的 numpy 数组,我想按多列排序(其中一些可能是 np.str_ 类型。我知道我可以做到这使用 np.lexsort。 有没有办法指定每个排序列的升序/降序? 示例:我知道我可
这个功能是如何工作的? import numpy as np first_names = (5,5,5) last_names = (3,1,2) x = np.lexsort((first_name
您好,我想使用 lexsort 排序一个 numpy.array。 import numpy as np surnames = ['Hertz', 'Galilei', 'Hertz'] names
我有一个要排序的数组。有些条目是字符串,因此 numpy 将所有内容都视为字符串(包括数字)。总的来说这很好,我实际上在几个地方利用了它,但是在尝试对其进行排序时会导致一些问题。 基本上,当字符串长度
我有一组制表符分隔的文件,我必须阅读它们,将它们用作 pandas 数据框,对它们进行一大堆操作,然后将它们合并回一个 excel 文件,代码太长了我将讨论其中有问题的部分 我正在解析的选项卡文件包含
假设我用 pandas 构建了一个具有多索引列的数据框: mi = pd.MultiIndex.from_product([['trial_1', 'trial_2', 'trial_3']
我在三个维度上收集了 N 个点。它们存储为 np.array,形状为 (N,3)。所有点都不同,任意两点之间的最小距离为 ~1e-5。我正在寻找一种方法来获得迭代这些点的顺序,该顺序既独立于它们在 n
我正在编写一个程序,根据特定公司内氨基酸的能量值(value)对氨基酸名称进行排序。 我已将相关数据提取到以下 numpy 数组中。 我尝试过这个 In[37]: Data = np.array([
我正在使用 df.loc[(key1, key2)] 为大型多索引 Pandas df 建立索引。有时我会得到一个系列(如预期的那样),但有时我会得到一个数据框。我试图隔离导致后者的情况,但到目前为止
这个问题部分是为了帮助我理解多索引上下文中的词法排序。 假设我有一些 MultiIndexed DataFrame df,对于我想使用的索引: a = (1, 1, 1) 所以要从我写的数据框中提取值
考虑数组a np.random.seed([3,1415]) a = np.random.randint(10, size=(5, 4)) a array([[0, 2, 7, 3],
我有下面这行代码 end_df['Soma Internet'] = end_df.iloc[:,end_df.columns.get_level_values(1) == 'Internet'].
我是一名优秀的程序员,十分优秀!