Ejemplo n.º 1
0
def create_report_affine(state, report_id):
    y_dot_mean = state.result.y_dot_stats.mean
    y_dot_cov = state.result.y_dot_stats.covariance
    y_dot_inf = state.result.y_dot_stats.information
    y_dot_min = state.result.y_dot_stats.minimum
    y_dot_max = state.result.y_dot_stats.maximum

    y_mean = state.result.y_stats.mean
    y_cov = state.result.y_stats.covariance
    y_inf = state.result.y_stats.information
    y_min = state.result.y_stats.minimum
    y_max = state.result.y_stats.maximum

    u_mean = state.result.u_stats.mean
    u_inf = state.result.u_stats.information
    u_cov = state.result.u_stats.covariance

    N = state.result.N.get_value()

    report_y_dot = create_report_var(
        name="y_dot", mean=y_dot_mean, cov=y_dot_cov, inf=y_dot_inf, minimum=y_dot_min, maximum=y_dot_max
    )

    report_y = create_report_var(name="y", mean=y_mean, cov=y_cov, inf=y_inf, minimum=y_min, maximum=y_max)

    report_u = create_report_var(name="u", mean=u_mean, cov=u_cov, inf=u_inf)

    T = state.result.T.get_value()
    report_T = create_report_figure_tensors(T, report_id="T", caption="Learned T")

    Nreport = Node("n-report")

    with Nreport.data("N", N).data_file("N", "image/png") as filename:
        pylab.figure()
        for i in range(N.shape[1]):
            v = N[:, i].squeeze()
            pylab.plot(v)

        pylab.savefig(filename)
        pylab.close()

    f = Nreport.figure("nfig")
    f.sub("N/N")

    bT = state.result.bT.get_value()
    report_bT = create_report_figure_tensors(bT, report_id="bT", caption="Learned bT")

    bTn = state.result.bTn.get_value()
    report_bTn = create_report_figure_tensors(bTn, report_id="bTn", caption="Learned bTn")

    node = Node(id=report_id, children=[report_y, report_y_dot, report_u, report_T, Nreport, report_bT, report_bTn])
    return node
Ejemplo n.º 2
0
def analyze_olfaction_covariance(covariance, receptors):
    ''' Covariance: n x n covariance matrix.
        Positions:  list of n  positions '''
    
    positions = [pose.get_2d_position() for pose, sens in receptors] #@UnusedVariable
    positions = array(positions).transpose().squeeze()
    
    require_shape(square_shape(), covariance)
    n = covariance.shape[0]
    require_shape((2, n), positions)
    
    distances = create_distance_matrix(positions)
    correlation = cov2corr(covariance)
    flat_distances = distances.reshape(n * n) 
    flat_correlation = correlation.reshape(n * n)
    
    # let's fit a polynomial
    deg = 4
    poly = polyfit(flat_distances, flat_correlation, deg=deg)  
    
    knots = linspace(min(flat_distances), max(flat_distances), 2000)
    poly_int = polyval(poly, knots)
    
    poly_fder = polyder(poly)
    
    fder = polyval(poly_fder, distances)
    
    Ttheta = create_olfaction_Ttheta(positions, fder)
    Tx, Ty = create_olfaction_Txy(positions, fder, distances)
    
    
    report = Node('olfaction-theory')
    report.data('flat_distances', flat_distances)
    report.data('flat_correlation', flat_correlation)
    
    
    with report.data_file('dist_vs_corr', 'image/png') as filename:
        pylab.figure()
        pylab.plot(flat_distances, flat_correlation, '.')
        pylab.plot(knots, poly_int, 'r-')
        pylab.xlabel('distance')
        pylab.ylabel('correlation')
        pylab.title('Correlation vs distance')
        pylab.legend(['data', 'interpolation deg = %s' % deg]) 
        pylab.savefig(filename)
        pylab.close()
    
    with report.data('fder', fder).data_file('fder', 'image/png') as filename:
        pylab.figure()
        pylab.plot(knots, polyval(poly_fder, knots), 'r-')
        pylab.title('f der')
        pylab.savefig(filename)
        pylab.close() 
    
    report.data('distances', distances)
    report.data('correlation', correlation)
    report.data('covariance', covariance)
    report.data('f', polyval(poly, distances))   
    
    
    
    f = report.figure(id='cor-vs-distnace', caption='Estimated kernels',
                       shape=(3, 3))
    f.sub('dist_vs_corr')
    f.sub('fder')
    f.sub('f', display='scale')
    f.sub('distances', display='scale')
    f.sub('correlation', display='posneg')
    f.sub('covariance', display='posneg')
    
    T = numpy.zeros(shape=(3, Tx.shape[0], Tx.shape[1]))
    T[0, :, :] = Tx
    T[1, :, :] = Ty
    T[2, :, :] = Ttheta
    
    T_report = create_report_figure_tensors(T, report_id='tensors',
        caption="Predicted learned tensors")
    
    report.add_child(T_report)

    return report