python - 如何对 numpy 数组列表进行排序?

标签 python arrays list sorting numpy

我想将一个 4x4 数组划分为四个 2x2 数组的列表。这个

| 0   1   2   3 |
| 4   5   6   7 |
| 8   9  10  11 |
|12   13 14  15 | 

应分为四个 block

| |0   1|  |2   3 | |
| |4   5|  |6   7 | |
|                   |
| | 8   9| |10  11| |
| |12  13| |14  15| | 

所以,如果我访问 block 1 那么它应该是[2,3],[6,7]

我写了这个方法:

from numpy import *
from operator import itemgetter

def divide_in_blocks(A):
    A1 = hsplit(A, A[0].size/2)
    for i, x in enumerate(A1):
        A1[i] = vsplit(x, x.size/4)
    return A1

if __name__ == '__main__':
    a = arange(16).reshape(4,4)
    a1 = divide_in_blocks(a)
    #print a
    #a1 = sorted(a1, key=itemgetter(2))
    print a1  

将数组划分为

| |0   1|  | 8   9 | |
| |4   5|  |12  13 | |
|                    |
| |2   3|  |10   11| |
| |6   7|  |14   15| | 

即我得到的 block 1 为 [8, 9], [12, 13]

代码输出:

[[array([[0, 1],
         [4, 5]]), 
  array([[ 8,  9],
         [12, 13]])], 
 [array([[2, 3],
         [6, 7]]), 
  array([[10, 11],
         [14, 15]])]]  

有什么方法可以对这个数组列表进行排序以获得所需的输出:

 [[array([[0, 1],
         [4, 5]]),
  array([[2, 3],
         [6, 7]])], 
 [array([[ 8,  9],
         [12, 13]]), 
  array([[10, 11],
         [14, 15]])]]  

最佳答案

我只会使用数组切片

>>> blocksize = 2
>>> h, w = a.shape
>>> rows = xrange(0, h, blocksize)
>>> cols = xrange(0, w, blocksize)
>>> [[a[row:row+blocksize, col:col+blocksize] for col in cols] for row in rows]

[[array([[0, 1],
         [4, 5]]), array([[2, 3],
         [6, 7]])], [array([[ 8,  9],
         [12, 13]]), array([[10, 11],
         [14, 15]])]]

关于python - 如何对 numpy 数组列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782986/

相关文章:

javascript - 根据条件过滤嵌套数组

c - 输出突然用空格分隔 int

python - 如何根据列表项对列表列表进行排序,列表项是在 python 中表示为字符串的数字?

python - 我已经安装了 OpenCV C++。我可以在不重新安装库的情况下在 Python 中使用它的功能吗?

python - 我的嵌入式 python stdout 去了哪里?

javascript - 使用 OR 运算符取反数组中的值

python - 重新排列点列表以达到它们之间的最短距离

python - 如何在 Mac OSX 上安装 paramiko?

c++ - 如何创建脚本语言

java - 创建类型为 Field 的可观察列表