Numpy:将不均匀的1D阵列重塑为2D阵列以进行字节绘制

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

对于每个人来说这可能太容易了,但正如我在主题中所提到的,有没有办法将不均匀的1D numpy数组重塑为2D numpy数组?当我说不均匀的1D数组时,形状是(34191,),这来自于使用np.fromfile读取二进制文件

我在这里尝试做的实际事实是显示/绘制我正在读取的二进制文件作为图像(如字节图)。因此,将文件读取为1D numpy数组,将其转换为2D数组,显示/绘图/将其保存为灰度图像。

任何想法都表示赞赏

numpy reshape
1个回答
1
投票

如果我正确地解释了这个问题,你就有了一维数组,并且想要将它显示为一个图像,但你不知道它应该是什么样的形状。

该函数找到数字的“最平方”形状(即,值最接近的两个因子)。

import numpy as np

def closest_factor_pair(x: int) -> tuple:
    """
    Tries to find the pair of factors of x, i.e. the
    closest integers to the square root of x.

    Example
    >>> closest_factor_pair(34191)
    (131, 261)
    """
    for i in range(int(np.sqrt(x)), 0, -1):
        if x % i == 0:
            return i, int(x/i)
    return None

我们可以用它来猜测数组的大小并显示它:

>>> size = 34191
>>> shape = closest_factor_pair(size)
(131, 261)

如果你有阵列,你可以重塑它并显示:

import matplotlib.pyplot as plt

arr = np.random.random(size)
plt.matshow(arr.reshape(shape))

这使:

image of random numbers formed from 1D array

© www.soinside.com 2019 - 2024. All rights reserved.