我正在做一个涉及渗透的任务 - 长话短说,我有一个代表网格的数组数组,每个条目都是-1,0或1.我的作业基本完成,但有一部分要求用于使用每个可能条目的颜色的矩阵的图形表示。但是从作业的措辞方式来看,我觉得也许我不应该使用标准Python 2.7和numpy中没有的东西。
我无法想到如何做到这一点所以我只是继续导入pylab并将每个坐标绘制成散点图中的大型彩色方块。但我只是抱怨这是一个更好的方法来做到这一点 - 就像有一个更好的方法来使用这个任务,或者就像有一种方法来做这个只是numpy。建议?
如果有帮助,我现在的代码就在下面。
def show_perc(sites):
n = sites.shape[0]
# Blocked reps the blocked sites, etc., the 1st list holds x-coords, 2nd list holds y.
blocked = [[],[]]
full = [[],[]]
vacant = [[],[]]
# i,j are row,column, translate this to x,y coords. Rows tell up-down etc., so needs to
# be in 1st list, columns in 0th. Top row 0 needs y-coord value n, row n-1 needs coord 0.
# Column 0 needs x-coord 0, etc.
for i in range(n):
for j in range(n):
if sites[i][j] > 0.1:
vacant[0].append(j)
vacant[1].append(n-i)
elif sites[i][j] < -0.1:
full[0].append(j)
full[1].append(n-i)
else:
blocked[0].append(j)
blocked[1].append(n-i)
pl.scatter(blocked[0], blocked[1], c='black', s=30, marker='s')
pl.scatter(full[0], full[1], c='red', s=30, marker='s')
pl.scatter(vacant[0], vacant[1], c='white', s=30, marker='s')
pl.axis('equal')
pl.show()
答案 0 :(得分:1)
如果您不允许使用其他库,那么您将无法使用ASCII艺术。例如:
>>> import numpy as np
>>> a = np.random.randint(-1, 2, (5,5))
>>> a
array([[ 0, 0, 1, 1, 0],
[ 1, -1, 0, -1, 0],
[-1, 0, 0, 1, -1],
[ 0, 0, -1, -1, 1],
[ 1, 0, 1, -1, 0]])
>>>
>>>
>>> b[a<0] = '.'
>>> b = np.empty(a.shape, dtype='S1')
>>> b[a<0] = '_'
>>> b[a==0] = ''
>>> b[a>0] = '#'
>>> b
array([['', '', '#', '#', ''],
['#', '_', '', '_', ''],
['_', '', '', '#', '_'],
['', '', '_', '_', '#'],
['#', '', '#', '_', '']],
dtype='|S1')
>>>
>>> for row in b:
... for elm in row:
... print elm,
... print
...
# #
# _ _
_ # _
_ _ #
# # _
>>>
但是,如果你可以使用matplotlib,你可以使用imshow
来绘制矩阵:
>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>> plt.imshow(a, cmap='gray', interpolation='none')
答案 1 :(得分:0)