在Python中,如何将元素是嵌套元组的矩阵拆分为块?

2024-09-20 22:52:03 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是如何将矩阵分解成块。你知道吗

如果我有一个4x4矩阵看起来像这样。你知道吗

[[a, b, c, d], [e, f, g, h], [h, i, j, k], [l, m, n, o]]

我想分成以下几个部分:

[a, b]  
[c, d]  

[h, i]  
[j, k]

[e, f]  
[g, h]  

[l, m]  
[n, o]

但是abco是嵌套元组,例如a = [(x1,y1),(x2,y2),...(xn,yn)]。对于矩阵中的每个元素,n不一定相等。你知道吗

是否有任何内置函数可以做到这一点,或者我必须操纵索引并逐个选取元素?我试图使用np.vsplit()np.hsplit(),但它们对我的数据无效。你知道吗

更新: np.vsplit()np.hsplit()可能会解决我的问题,但还有一个问题。我得到的数据是16个坐标列表,但是这些列表的长度(每个列表中的2d坐标数)不相等。为了使用np.vsplit()np.hsplit(),我必须将16个列表转换为numpy ndarray并对其进行重塑。这个数组的形状应该类似于(4, 4, x, 2),这意味着它们被放置在44列中,每个元素都有x=number_of_coordinates_in_that_list2列。我能用np.reshape()来实现我想要的吗?你知道吗


Tags: 数据元素列表np矩阵元组x1x2
2条回答

我终于解决了我的问题,想总结一下。 我的数据有点像

[ 
    [(1.008,0.177),(1.035,0.511),...,(3.221,0.472)], 
    [(0.332,0.122),(1.023,0.115),...,(3.323,0.427)], 
    ...,
    [(0.212,0.141),(1.023,0.115),...,(3.892,0.918)],
]

我不知道如何用英语描述这种数据,但它本质上是一个列表,其元素是列表中的元组。它是一维的,但是我想用这个数据作为二维矩阵,把它分成块,就像我在问题中描述的那样。你知道吗

我只是在1D列表中找到每个块的索引并将其切片。你知道吗

Data = [ [(), (), ...], [(), (), ...], ... ]
# Calculate block start index(Upper left).
rows = int(matrix_size / block_size)
columns = int(matrix_size / block_size)
index_0s = []
for row in range(rows):
    for column in range(columns):
        index_0s.append(row * matrix_size * block_size + column * block_size)

def generate_block(block_start_index):
    indices = []
    for i in range(block_size):
        for j in range(block_size):
            index_ij = matrix_size * i + block_start_index + j
            indices.append(index_ij)
    block = []
    for block_index in indices:
        block.append(Data[block_index])
    return block

# Generate all blocks.
blocks = []
for index_0 in index_0s:
    block_i = generate_block(index_0)
    blocks.append(block_i)

这就是你想要的吗?你知道吗

[[i[:2],i[2:]] for i in a]

相关问题 更多 >

    热门问题