numpy Python sorted()返回奇怪的列表:[array([…],dtype=int64),…]

jogvjijk  于 2023-05-17  发布在  Python
关注(0)|答案(1)|浏览(152)

我正在学习/练习Python并编写了这个简单的程序

import numpy as np

rng = np.random.default_rng()
randList = rng.integers(200, size=(50, 2)) + 1
sortList = sorted(randList, key=lambda x:x[0])

print(randList)
print(sortList)

生成50对1到200之间的随机整数(包括1和200),然后根据第一个元素将列表排序为新列表
当打印未排序的列表时,我得到

[[x y]
 [x y]
  ... ]

但是,当我打印排序列表时,我得到

[array([x, y], dtype=int64),
 array([x, y], dtype=int64),
 .......................... ]

列表实际上是按我想要的排序的,但是它打印了所有这些额外的东西。
我做错什么了吗?我找到的所有与排序函数相关的例子都没有提到这一点,我找不到任何解释为什么它会这样做。
我几乎只用C++编程,所以Python对我来说很陌生。请帮助我理解。
我已经尝试了一些东西与单独的列表和排序的元组或什么,但它很难理解,并没有工作的预期。

sxpgvts3

sxpgvts31#

只是NumPy和Python有不同的可迭代类型。当你打印一个2d NumPyarray时,它知道如何正确显示自己。当你打印一个2d Pythonlist时,它知道如何正确地显示自己。当你使用sorted()时,它会将一个2d NumPy数组转换为一个1d NumPy数组的普通Python列表。Python列表不知道如何打印出NumPy子数组的良好表示,所以它有点混乱。
要解决这个问题,您可以使用use NumPy to sort the NumPy array

sortList = randList[numpy.argsort(randList[:, 0])]
  • 注意,以前使用过sort,但做错了。这应该是正确的。*

或者你可以将sorted()中的列表转换为NumPy数组:

sortList = numpy.array(sorted(randList, key=lambda x:x[0]))

或者你可以完全convert the NumPy array to a list

sortList = sorted(randList.toList(), key=lambda x:x[0])

相关问题