前几天搜索注意力训练方法,看到利用舒尔特方格进行练习的,一套舒尔特数字方格卡片竟然要几十块钱,用python自己生成它不香嘛~
示例1: 9x9数字舒尔特方格
示例2:古诗词舒尔特方格
这样的舒尔特方格用以下代码就可以生成!
#coding: UTF-8
import random
import math
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
def SchulteGrid(N, content=None):
# 定义网格内容
if content == None:
num = list(range(1,N*N+1))
random.shuffle(num)
num = np.array(num)
num.reshape(N,N)
else:
num = content
random.shuffle(num)
vlines = list(range(0,N+1))
hlines = list(range(0,N+1))
# 绘制网格
plt.figure(figsize=(N,N))
plt.axis('off')
plt.vlines(vlines, min(hlines), max(hlines), colors='.25', linewidth=.75)
plt.hlines(hlines, min(vlines), max(vlines), colors='.25', linewidth=.75)
xs, ys = np.meshgrid(vlines[1:], hlines[:-1])
for i, (x,y) in enumerate(zip(xs.flatten(), ys.flatten())):
if type(num[i])==str:
x = x-0.3
elif num[i] < 10:
x = x-0.4
else:
x = x-0.3
plt.text(x, y+0.3, str(num[i]), horizontalalignment='right',verticalalignment='bottom', size=18)
def SchulteGrid_CH(ctext, title):
cctext = []
for i in ctext:
if i not in [',','。','?','!',':']:
cctext.append(i)
N = math.sqrt(len(cctext))
if int(N)==N:
SchulteGrid(int(N), cctext)
plt.title(title, size=20)
else:
print('The give text cannot be transfered into Schulte Grid!')
#%% Human–Computer Interaction
SchulteGridType = input('Schulte Grid Type you want to generate:')
if SchulteGridType =='Chinese':
ctext = input('The content is:')
title = input('The title is:')
SchulteGrid_CH(ctext, title)
else:
N = input('N:')
SchulteGrid(int(N))
生成的图片再保存下来,打印就可以拥有自己的SchulteGrid练习卡片啦~