首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从一个轴上相同长度和排序的多个列表中获取numpy数组?

如何从一个轴上相同长度和排序的多个列表中获取numpy数组?
EN

Stack Overflow用户
提问于 2015-05-31 19:14:48
回答 2查看 131关注 0票数 3

我有一个非常简单的问题,如何从多个长度相同的列表中获得numpy数组,并沿着一个轴排序?

我在找这样的东西:

代码语言:javascript
复制
a = [1,1,2,3,4,5,6]
b = [10,10,11,09,22,20,20]
c = [100,100,111,090,220,200,200]
d = np.asarray(a,b,c)
print d
>>>[[1,10,100],[1,10,100],[2,11,111].........[6,20,200]]

第二个问题:如果这可以实现的话,我能沿着一个轴对它进行排序吗?在清单b的值上)?

第三个问题:可以在一个范围内进行排序吗?就像。获取b+10和b-10之间的值,同时查看列表c以进一步排序。喜欢

代码语言:javascript
复制
[[1,11,111][1,10,122][1,09,126][1,11,154][1,11,191]
 [1,20,110][1,25,122][1,21,154][1,21,155][1,21,184]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-31 19:17:37

您可以压缩以获得数组:

代码语言:javascript
复制
a = [1, 1, 2, 3, 4, 5, 6]
b = [10, 10, 11, 9, 22, 20, 20]
c = [100, 100, 111, 90, 220, 200, 200]
d = np.asarray(zip(a,b,c))
print(d)
[[  1  10 100]
 [  1  10 100]
 [  2  11 111]
 [  3   9  90]
 [  4  22 220]
 [  5  20 200]
 [  6  20 200]]

print(d[np.argsort(d[:, 1])]) # a sorted copy
[[  3   9  90]
[  1  10 100]
[  1  10 100]
[  2  11 111]
[  5  20 200]
[  6  20 200]
[  4  22 220]]

我不知道如果不做这样的事情,你怎么能做一个内部排序:

代码语言:javascript
复制
d = np.asarray(zip(a,b,c))

d.dtype = [("0", int), ("1", int), ("2", int)]
d.shape = d.size
d.sort(order="1")

前面的0将使090八进制以python2表示,而在python3中则使语法无效,因此我将其删除。

还可以在传递以下内容之前对压缩元素进行排序:

代码语言:javascript
复制
from operator import itemgetter
zipped = sorted(zip(a,b,c),key=itemgetter(1))


d = np.asarray(zipped)
print(d)
[[  3   9  90]
 [  1  10 100]
 [  1  10 100]
 [  2  11 111]
 [  5  20 200]
 [  6  20 200]
 [  4  22 220]]
票数 2
EN

Stack Overflow用户

发布于 2015-05-31 20:47:21

您可以使用np.dstacknp.lexsort。例如,如果您想根据数组b(第二轴)进行排序,那么a然后是c

代码语言:javascript
复制
>>> d=np.dstack((a,b,c))[0]
>>> indices=np.lexsort((d[:,1],d[:,0],d[:,2]))
>>> d[indices]
array([[  3,   9,  90],
       [  1,  10, 100],
       [  1,  10, 100],
       [  2,  11, 111],
       [  5,  20, 200],
       [  6,  20, 200],
       [  4,  22, 220]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30561617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档