python - 在 Python/numpy 中对容器进行排序

标签 python sorting numpy

我需要对一个特殊的 numpy 数组进行排序,其中大小为 19 的 block 构成一个元素,使用用户定义的函数来确定这样一个 block 的值。

第一次尝试是将数组包装在一个类中并重载 [] 运算符:

class W:
    def __init__(self, filename="nn.txt"):
        self.nn = array([int(i) for i in open(filename, "r").readlines()[1:]])
        self.size = self.nn.size / 19

    def __getitem__(self, idx):
        return self.nn[idx:idx+19] 

    def __len__(self):
            return self.size

我使用这个结构提供了一个比较运算符,它被传递给 sorted():

def avg_cmp(x, y):
   return int(average(x)) - int(average(y))

u = W("nnsmall.txt")
sorted(u, cmp=avg_cmp)

但是,这种方法太慢了。

有什么建议吗?

最佳答案

你试过sorted(u, key=average)了吗?这只会计算每列的平均值一次。

如果数组的大小总是可以被19整除而没有余数:

>>> import numpy as np
>>> n = 2
>>> u = np.array([v for v in range(19*n)])

>>> u = u.reshape(n,19)

>>> sorted(c, key=np.average)

[array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18]),
 array([19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37])]

关于python - 在 Python/numpy 中对容器进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802367/

相关文章:

python - 用numpy乘以高阶矩阵

python - 如何加速 numpy.all 和 numpy.nonzero()?

python /usr/bin/env : bad interpreter: Not a directory

Python 无法工作 - "Program ' python.exe' 无法运行”

java - java中的合并排序实现是将一个值复制到另一个索引中而不是交换

python - lambda排序列表奇怪的行为

python - 在python中根据时间戳对字典进行排序

python - 为什么我的列表没有按预期排序?

python - Pandas 中系列子集的条件变换

python - 2D 数组的 Numpy 梯度