Numpy:将不均匀1D数组重新整形为二维数组,以进行字节打印

Numpy:将不均匀1D数组重新整形为二维数组,以进行字节打印,numpy,reshape,Numpy,Reshape,这对每个人来说都太容易了,但正如我在本主题中提到的,有没有办法将不均匀的1D numpy阵列重塑为2D numpy阵列? 当我说非均匀1D数组时,形状是(34191,),这是使用np.fromfile读取二进制文件得到的 我在这里要做的实际工作是将我正在读取的二进制文件显示/打印为图像(如字节图)。 因此,将文件读取为1D numpy数组,将其转换为2D数组,显示/打印/保存为灰度图像 如果我正确地解释了这个问题,你有一个1D数组,你想把它显示为一个图像,但是你不知道它应该是什么形状 此函数用于

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

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


如果我正确地解释了这个问题,你有一个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))
其中:


您希望图像具有什么尺寸?我想先试用64x64。谢谢你的回答,我想我没有得到你想要的。您有34191个值,并希望将它们排列在二维网格中,对吗?但是如果网格只有64x64,那么这些值显然不适合。我想我还没有正确理解这个问题,你能试着澄清一下吗?如前所述,我想做一个字节图。也就是说,我的二进制文件的每个字节都将被视为像素,并打印/显示/保存为图像。因此,它类似于二进制十六进制查看器,但我想将二进制文件的可视化保存为nxm大小的图像
arr[:n*m]。如果
n*m
小于总长度,重塑(n,m)
将其转换为2d数组,这要感谢很多kwinkunks。正是我想要的,不用担心@jaysonpryde。我突然想到,您需要同时使用
(a,b)
(b,a)
来尝试重塑,以查看哪个更“有条理”。也许你可以想出一种方法,根据你的数据自动判断哪种是正确的/最好的。