使用 Python 创建棋盘分布

Sam*_*uel 6 python matplotlib

我想在 Python 中创建一个棋盘分布。

目前我使用以下脚本来创建一个2 x 2大小的棋盘:

import numpy as np
import matplotlib.pyplot as plt

n_points = 1000
n_classes = 2

x = np.random.uniform(-1,1, size=(n_points, n_classes))
mask = np.logical_or(np.logical_and(x[:,0] > 0.0, x[:,1] > 0.0), \
np.logical_and(x[:,0] < 0.0, x[:,1] < 0.0))
y = np.eye(n_classes)[1*mask]

plt.scatter(x[:,0], x[:,1], c=y[:,0], cmap="bwr", alpha=0.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这创造了

在此处输入图片说明

我想知道是否存在一种简单的方法来概括上述代码以创建大小的棋盘分布n x n

编辑

使用@jpf 很好的解决方案

import numpy as np
import matplotlib.pyplot as plt
from numpy import sin

n_points = 10000
n_classes = 2
n = 8

x = np.random.uniform(-(n//2)*np.pi, (n//2)*np.pi, size=(n_points, n_classes))
mask = np.logical_or(np.logical_and(sin(x[:,0]) > 0.0, sin(x[:,1]) > 0.0), \
np.logical_and(sin(x[:,0]) < 0.0, sin(x[:,1]) < 0.0))
y = np.eye(n_classes)[1*mask]

plt.scatter(x[:,0], x[:,1], c=y[:,0], s=1, cmap="bwr", alpha=0.5)
plt.savefig("test.png", dpi=150)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我现在可以生成任意大小的棋盘分布:

在此处输入图片说明

jpf*_*jpf 5

如何使用像正弦这样的周期函数?

import numpy as np
import matplotlib.pyplot as plt
from numpy import sin

n_points = 10000
n_classes = 2

x = np.random.uniform(-10,10, size=(n_points, n_classes))
mask = np.logical_or(np.logical_and(sin(x[:,0]) > 0.0, sin(x[:,1]) > 0.0), \
np.logical_and(sin(x[:,0]) < 0.0, sin(x[:,1]) < 0.0))
y = np.eye(n_classes)[1*mask]

plt.scatter(x[:,0], x[:,1], c=y[:,0], cmap="bwr", alpha=0.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

  • 很棒的方法。我们可以使用类似 np.random.uniform(-n*np.pi,n*np.pi, size= (n_points, n_classes))` 拥有完美的边界。其中“n”是自然数。 (2认同)