Я работаю над построением сетки 1000 x 1000, где белый квадрат представляет собой не простое число, а черный квадрат представляет собой простое число.
Как это должно выглядеть, это отображение большой сеткицифры 0-1 000 000 и затемнение любого квадрата, где простое число (таким образом, на первом и втором квадратах он белый (0 и 1), а третий и четвертый квадрат - черный (2 и 3) и т. д.).Вплоть до 1 000 000
Мой код пока:
Импорт
from math import sqrt, ceil
import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np
Создание списка простых чисел
def all_prime(n):
# /2029352/samyi-bystryi-sposob-perechislit-vse-prostye-chisla-nizhe-n#2029364
""" Returns a list of primes < n """
sieve = [True] * n
for i in range(3,int(n**0.5)+1,2):
if sieve[i]:
sieve[i*i::2*i]=[False]*((n-i*i-1)//(2*i)+1)
return [2] + [i for i in range(3,n,2) if sieve[i]]
Фактическое построение графика
def prime_plot(n):
'''
Takes on argument (n), which is a number > 2 and produces a list of all primes up to n.
Will then show on a plot the primes vs all numbers in range n.
'''
x = all_prime(n)
y = list(range(n))
data = np.random.rand(10, 10) * 20
cmap = colors.ListedColormap(['white', 'black'])
bounds = [0,10,20]
norm = colors.BoundaryNorm(bounds, cmap.N)
fig, ax = plt.subplots()
ax.imshow(data, cmap=cmap, norm=norm)
# draw gridlines
ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2)
ax.set_xticks(np.arange(0, 10, 1));
ax.set_yticks(np.arange(0, 10, 1));
plt.show()
prime_plot(100)
Хотя я собираюсь создать сетку размером mxm (где m - это sqrt (len (n)), я хочуначать с создания сетки статического размера.
Как я могу изменить приведенный выше код, чтобы создать то, что я хочу. Большие сетки выглядят очень грязно с matplotlib.
При изменении данныхиспользовать списки Я получаю TypeError: невозможно преобразовать данные изображения в число с плавающей точкой
data = (x, y)
Как мне нужно преобразовать списки x и y в то, что мне нужно (вместо случайно сгенерированных чисел)