Python可视化优化参数

时间:2017-04-08 22:56:21

标签: python matplotlib graph scipy data-visualization

我有以下代码,其中我遍历2个参数的网格,以便查看哪组参数将产生最佳结果。

my_sequences = []
for line in file:
    line = line.rstrip()
    if ">" not in line:
        my_sequences = [line] # add these dna sequences to the list "my_sequences"
print my_sequences

结果我获得了3个数组,一个包含每次迭代的结果,另一个包含相应参数的两个数组(p1,p2)。我现在想用matplotlib绘制这些数据,以可视化结果在参数平面上的变化情况。

我尝试了以下但是我得到了一个空白的情节:

from sklearn.grid_search import ParameterGrid

ar1= np.arange(1,10,0.1)
ar2= np.arange(0.1,3,0.01)
param_grid = {'p1': ar1, 'p2' : ar2}
grid = ParameterGrid(param_grid)
result=[]
p1=[]
p2=[]

for params in grid:
     r = getresult(params['p1'], params['p2'])
     result.append(r)
     p1.append(params['p1'])
     p2.append(params['p2'])

理想情况下,我希望能够创建类似下图的内容。我怎样才能用matplotlib实现这个目标?

enter image description here

2 个答案:

答案 0 :(得分:1)

我最终得到了以下解决方案:

fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot_trisurf(X, Y, Z, cmap=cm.jet, linewidth=0)
fig.tight_layout()
plt.show()

以上产生了所需的可视化,如下所示:

enter image description here

答案 1 :(得分:0)

plot_surface要求输入数组是二维的。当我解释它时,你的数组是1D。因此,将它们重塑为2D可能是一种解决方案。

import numpy as np
shape = (len(ar2), len(ar1))
p1 = np.array(p1).reshape(shape)
p2 = np.array(p2).reshape(shape)
result = result.reshape(shape)

然后通过

绘制它
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(p1, p2, result)

可能会奏效。 (我现在无法测试它。)