如何在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]

但是abc ... o是嵌套的元组,例如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并对其进行整形。此ndarray的形状应类似于(4,4,x,2),这意味着它们被放置在4行,4列中,每个元素都有x=number_of_coordinates_in_that_list2列。我可以使用np.reshape()实现我想要的吗?

shanghaiditu 回答:如何在Python中将嵌套元组的矩阵拆分为块?

这就是你想要的吗?

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

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

[ 
    [(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),(3.892,0.918)],]

我不知道如何用英语来描述这种数据,但是它本质上是一个列表,其元素是列表中的元组。它是一维的,但我想将此数据用作2D矩阵,并将其拆分为类似于我在问题中描述的块。

我只是在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)
本文链接:https://www.f2er.com/3162516.html

大家都在问