我想要创建两个图,一个在复平面上有高斯素数,另一个表示这个复数的(高斯)素数。我可以同时计算原始性(第一个场景)和因子(第二个),但无法找到可视化的正确格式。
在第一种情况下,我只想对给定维数的复杂平面中的每一个质数画一个勾,就像在这个Wolfram Mathworld页面中所示。我已经定义了一个具有以下签名的函数:is_gaussian_prime(c : complex) -> bool。我所缺少的是一个合适的数据结构,用于存储从real_min到real_max,从imag_min到imag_max的所有复数的首要信息,以及可视化该数据结构的方法。我已经将seaborn.relplot()作为文档化的这里查看过了,但无法完全理解,我希望数据是什么样的形状。
我想使用relplot()的原因是,在第二个场景中,允许为不同数量的素因子绘制不同大小的滴答。这意味着我想用这样的方式画出第二幅图,它的大小代表了这个特定高斯数的素数。更准确地说,在第二幅图中,我想用不同的颜色画出高斯素数,而对于有更多因素的复合材料,我想把它画成黑色,具有更大的标记尺寸。对于本例,我有一个已经定义的以下签名的函数:number_of_gaussian_factors(c : complex) -> int。
发布于 2022-03-28 20:46:21
您可以生成一个高斯素数列表,然后在实部和虚部上调用sns.scatterplot:
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
from sympy.ntheory.primetest import is_gaussian_prime
N = 200
prime_set = set()
for i in range(N):
for j in range(N):
if is_gaussian_prime(i + j * 1j):
prime_set.add(i + j * 1j)
prime_set.add(i - j * 1j)
prime_set.add(-i + j * 1j)
prime_set.add(-i - j * 1j)
primes = np.array(list(prime_set))
plt.figure(figsize=(15, 15))
ax = sns.scatterplot(x=np.real(primes), y=np.imag(primes), color='tomato', s=20)
ax.set_aspect('equal')
plt.show()

计算素数似乎是再复杂一点,不太对称(例如,2=(1+i)(1-i)和2i=i(1+i)(1-i))。您有一个高斯整数数组(例如gaussian_ints)和伴随的因素数组(例如,num_factors),您可以调用例如sns.scatterplot(x=np.real(primes), y=np.imag(primes), size=num_factors, hue=num_factors)。
https://stackoverflow.com/questions/71641277
复制相似问题