numpy 二维数组转换为块矩阵

问题描述 投票:0回答:1

给定一个如下所示的 2x6 数组

x = np.array([[0,1,2,3,4,5],[6,7,8,9,10,11]])

如何将其转换为 6x6 矩阵,块对角线填充上述数组

输入

input

我期待的输出

output I am expecting

我在尝试发布此内容时遇到以下错误。 你的帖子主要是图片。添加其他详细信息以解释问题和预期结果。 请忽略最后一点

numpy block
1个回答
0
投票

您可以实现这样的函数,将二维数组转换为对角块矩阵。

def convert_to_diagonal(arr: np.ndarray, block_size: int = 2) -> np.ndarray:
    """
    Convert a 2D array into a diagonal block matrix.

    Parameters:
    arr (np.ndarray): The input 2D array.
    block_size (int): The size of the blocks to be placed on the diagonal.

    Returns:
    np.ndarray: A new array with the input array blocks placed on the diagonal.
    """
    _, cols = arr.shape  # Get the dimensions of the array
    num_blocks = cols // block_size
    
    # Create a new array
    new_size = block_size * num_blocks
    diagonal_array = np.full((new_size, new_size), -1, dtype=int)
    
    for k in range(num_blocks):
        # Calculate diagonal positions
        start_row = k * block_size
        start_col = k * block_size
        diagonal_array[start_row:start_row + block_size, start_col:start_col + block_size] = arr[:, k * block_size:k * block_size + block_size]
    
    return diagonal_array

和用法,

original_array = np.array([[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11]]) # Your array
diagonal_array = convert_to_diagonal(original_array) # Get diagonal representation of it
print(diagonal_array) # Optinally print it
© www.soinside.com 2019 - 2024. All rights reserved.