Визуализируйте одномерный массив 1D как двумерный массив с помощью matplotlib - PullRequest
1 голос
/ 11 октября 2019

У меня есть двумерный массив всех чисел от 1 до 100, разделенных на 10. И логические значения для каждого числа простое или не простое. Я изо всех сил пытаюсь понять, как визуализировать это, как показано на рисунке ниже.

Вот мой код, чтобы помочь понять, что у меня лучше.

Я хочу визуализировать это, как это фото онлайн,image

# excersize
is_prime = np.ones(100, dtype=bool)  # array will be filled with Trues since 1 = True

# For each integer j starting from 2, cross out its higher multiples:
N_max = int(np.sqrt(len(is_prime) - 1))
for j in range(2, N_max + 1):
    is_prime[2*j::j] = False

# split an array up into multiple sub arrays
split_primes = np.split(is_prime, 10);

# create overlay for numbers
num_overlay = np.arange(100)
split_overlay = np.split(num_overlay, 10)
plt.plot(split_overlay)

1 Ответ

1 голос
/ 11 октября 2019

Создание двумерного массива чисел

Ознакомьтесь с документацией для функции numpy reshape . Здесь вы можете превратить ваш массив в 2D-массив, выполнив:

data = is_prime.reshape(10,10)

мы также можем создать массив из первых 100 целых чисел, которые будут использоваться для маркировки аналогичным образом:

integers = np.arange(100).reshape(10,10)

Построение 2D-массива

При построении 2D-графики вам необходимо использовать одну из 2D-функций, которые предоставляет matplotlib: например, imshow, matshow, pcolormesh. Вы можете вызвать эти функции непосредственно в вашем массиве, и в этом случае они будут использовать colormap , и цвет каждого пикселя будет соответствовать значению в соответствующем месте в массиве. Или вы можете явно сделать RGB-изображение, которое дает вам немного больше контроля над цветом каждого блока. В этом случае я думаю, что это немного проще сделать, поэтому в приведенном ниже решении используется этот подход. Однако, если вы хотите аннотировать тепловые карты, документация по matplolib имеет отличный ресурс для этого здесь . Сейчас мы создадим массив значений RGB (в форме 10 на 10 на 3) и изменим цвета только простых чисел, используя возможности индексации numpy.

#create RGB array that we will fill in
rgb = np.ones((10,10,3)) #start with an array of white
rgb[data]=[1,1,0] # color the places where the data is prime to be white

plt.figure(figsize=(10,10))
plt.imshow(rgb)

# add number annotations
integers = np.arange(100).reshape(10,10)

#add annotations based on: https://stackoverflow.com/questions/20998083/show-the-values-in-the-grid-using-matplotlib
for (i, j), z in np.ndenumerate(integers):
    plt.text(j, i, '{:d}'.format(z), ha='center', va='center',color='k',fontsize=15)

# remove axis and tick labels
plt.axis('off')
plt.show()

В результате на этом изображении: array with primes highlighted in yellow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...