前几天搜索注意力训练方法,看到利用舒尔特方格进行练习的,一套舒尔特数字方格卡片竟然要几十块钱,用python自己生成它不香嘛~
示例1: 9x9数字舒尔特方格
示例2:古诗词舒尔特方格
这样的舒尔特方格用以下代码就可以生成!
#coding: UTF-8import randomimport mathimport numpy as npimport matplotlib.pyplot as pltplt.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 = contentrandom.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.3elif num[i] < 10:x = x-0.4else:x = x-0.3plt.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 InteractionSchulteGridType = 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练习卡片啦~