numpy:将不均匀的1D数组重塑为2D数组以进行字节绘图

时间:2019-03-26 15:05:01

标签: numpy reshape

这对每个人来说都太容易了,但是正如我在主题中提到的,有没有办法将不均匀的1D numpy数组重塑为2D numpy数组? 当我说不均匀的一维数组时,形状为(34191,),这是通过使用 np.fromfile

读取二进制文件而来的

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

任何想法都值得赞赏

1 个答案:

答案 0 :(得分:1)

如果我正确地解释了问题,则您有一个1D数组,并且希望将其显示为图像,但是您不知道先验应该是什么形状。

此函数查找数字的“最方形”形状(即,值上最接近的两个因子)。

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

相关问题