Numpy: преобразование неравномерного массива 1D в массив 2D для построения байтов - PullRequest
1 голос
/ 26 марта 2019

Это может быть слишком просто для всех, но, как я уже упоминал в этой теме, есть ли способ преобразовать неравномерный массив Numpy в 2D массив Numpy?Когда я говорю о неравномерном массиве 1D, форма равна (34191,) , и это происходит из-за чтения двоичного файла с использованием np.fromfile

Фактическая вещь, которую я 'я пытаюсь сделать это на самом деле отображать / отображать двоичные файлы, которые я читаю как изображения (например, байтовый график).Так что читайте файл как 1D-массив, конвертируйте его в 2D-массив, отображайте / отображайте / сохраняйте как изображения в оттенках серого.

Любые идеи приветствуются

1 Ответ

1 голос
/ 26 марта 2019

Если я правильно интерпретирую вопрос, у вас есть одномерный массив, и вы хотите отобразить его в виде изображения, но вы не знаете априори какой он должен быть.

Эта функция находит «самую квадратную» форму (т. Е. Два ближайших по значению фактора) числа.

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

...