Prepare data and 1D analysis

This notebook contains the creation of the feature space and the 1d histogram analysis (t-test, median values and 1dOT).
Furthermore, the Gaussian approximations and the linear embedding are calculated in preparation for the multidimensional analysis with OT (see nb2b_OT_analysis.ipynb).

In [1]:
import numpy as np
from numpy import mean, std, median, amax, pi, exp, append, argmax, save, savetxt, loadtxt
from numpy import array, column_stack, zeros, sin, cos, sqrt, load, ones, concatenate
import ot
import matplotlib.pyplot as plt
from numpy.random import multivariate_normal
from scipy.spatial import cKDTree
from time import time
import os
In [2]:
## settings for figures

import matplotlib.font_manager as fm
import matplotlib as mpl

# Edit font size, and axes width
plt.rcParams['font.size'] = 18
plt.rcParams['axes.linewidth'] = 2
In [3]:
# Description which coloum contains which feature.
# 0,1,2: X, Center of Geometry (µm)	Y, Center of Geometry (µm)	Z, Center of Geometry (µm)
# 3: Mean, Intensities
# 4: Standard Dev., Intensities
# 5: Volume, Volume (µm³)
# 6: Sphericity
# 7: Number of neighbors
# 8: Distance to nearest neighbor
In [4]:
## define datapaths
txt_data = 'Data/txt-data/'
fileroot = 'Data/Data-for-TransportAnalysis/'
resultpath = 'Results/'

if not os.path.isdir(resultpath):
    os.makedirs(resultpath)
In [5]:
# load in txt tables. The columns contain the features, rows correspond to single cells
# every file is one patient

#Group1 - CTRL
data1 = loadtxt(txt_data + '6716.txt', skiprows = 1)
data2 = loadtxt(txt_data + '6916.txt', skiprows = 1)
data3 = loadtxt(txt_data + '2616.txt', skiprows = 1)
data4 = loadtxt(txt_data + '5416.txt', skiprows = 1)
data5 = loadtxt(txt_data + '12816.txt', skiprows = 1)
data6 = loadtxt(txt_data + '6515.txt', skiprows = 1)

#Group2 - MS
data7 = loadtxt(txt_data + '12006.txt', skiprows = 1)
data8 = loadtxt(txt_data + 'T800.txt', skiprows = 1)
data9 = loadtxt(txt_data + '11313.txt', skiprows = 1)
data10 = loadtxt(txt_data + '13609.txt', skiprows = 1)
data11 = loadtxt(txt_data + '22091.txt', skiprows = 1)
data12 = loadtxt(txt_data + '3614.txt', skiprows = 1)

data = [data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12]
In [6]:
# define name of the features , tags and corresponding classes.
labels = ['X-Position', 'Y-Position', 'Z-Position', 'Volume', 'Electron density', 'Heterogeneity', 'Sphericity', 'Num-Neighbors', 'NN-Distance']
sampleTags = ['6716', '6916', '2616', '5416', '12816', '6515', '12006', 'T800', '11313', '13609', '22091', '3614']
classes = [0,0,0,0,0,0,1,1,1,1,1,1]
In [7]:
# list of indices of feature columns used in  analysis
list_f = [3,4,5,6,7,8]
In [8]:
## determine two features out of the nuclei positions:
# number of nearest neighbors within a radius (7.45µm) and distances to nearest neighbor


posdata = []
for i in range(len(data)):
    posdata.append(data[i][:,0:3])

# done with cKDtree
def nearest_neighbors_stats(x, r):
    # creates the tree
    tree = cKDTree(x)

    # number of neighbors in shell
    # iterates over all lists of pairs and returns the length of this list
    distances = tree.query_ball_point(x, r)
    d_counts = array([len(d) - 1 for d in distances])

    # calculates distance to nearest neighbor
    nn, ii = tree.query(x, k=[2])

    return d_counts, nn

# calculate number of neighbors in shell NN
for d, i in zip(posdata, range(len(posdata))):
    d_counts, nn = nearest_neighbors_stats(d, 7.45)    # value of 7.45 microns determined by first local minimum of radial distributions function

    # appending both features to data
    data[i] = column_stack((data[i], d_counts))
    data[i] = column_stack((data[i], nn))
In [9]:
## perform t-test for all features, print p values and medians of unstandartisized features for both groups in console
from scipy.stats import ttest_ind


# Note: since the feature number of neighbors always takes on integer values,
# the mean of the population is more expressive than the median of it.

for s in list_f:

    medians = []
    means = []

    for d in data:
        medians.append(median(d[:, s]))
        means.append(mean(d[:, s]))

    # apply Welch's two-sided t-test
    if s == 7:
        res = ttest_ind(means[0:6], means[6:12], equal_var=False)
    else:
        res = ttest_ind(medians[0:6], medians[6:12], equal_var=False)

    # print p-values
    print('p-Value of ' + labels[s] + ':', res[1])

   # print population medians and standard-deviation
    if s == 7:
        print('--ALL--')
        print(mean(means[0:12]))
        print(std(means[0:12]))

        print('--CTRL--')
        print(mean(means[0:6]))
        print(std(means[0:6]))

        print('--MS--')
        print(mean(means[6:12]))
        print(std(means[6:12]))

        print('___________')

    else:
        print('--ALL--')
        print(mean(medians[0:12]))
        print(std(medians[0:12]))

        print('--CTRL--')
        print(mean(medians[0:6]))
        print(std(medians[0:6]))

        print('--MS--')
        print(mean(medians[6:12]))
        print(std(medians[6:12]))

        print('___________')
p-Value of Volume: 0.28321472462861425
--ALL--
26.83089484333333
4.410673808858973
--CTRL--
28.353984208333333
5.347978077080411
--MS--
25.307805478333332
2.3806753150785043
___________
p-Value of Electron density: 0.2255301193645871
--ALL--
31.228847882083333
5.383980997603107
--CTRL--
29.192974651666663
5.019227798764506
--MS--
33.264721112500006
4.948969129885326
___________
p-Value of Heterogeneity: 0.0010978853197003086
--ALL--
8.784344697083332
0.9422884562319336
--CTRL--
8.011252402083334
0.5610520934610334
--MS--
9.557436992083334
0.5154534166558398
___________
p-Value of Sphericity: 0.5692073017109736
--ALL--
0.624443603125
0.009861512399345731
--CTRL--
0.6262655676666666
0.006543750954637025
--MS--
0.6226216385833333
0.01204321665778728
___________
p-Value of Num-Neighbors: 0.2808374913049974
--ALL--
7.243187016200025
1.204002072805068
--CTRL--
6.828422827967451
0.7540577048155545
--MS--
7.657951204432599
1.40946099512035
___________
p-Value of NN-Distance: 0.39128960309118455
--ALL--
4.377236832167613
0.2180066307421607
--CTRL--
4.436696444036097
0.19859700253184773
--MS--
4.31777722029913
0.2203227673059717
___________
In [10]:
## Standartisation with z-score


from scipy.stats import zmap


# Index of features to standartisize:
for i in list_f:

    #creates the total population (all nuclei of all patients) for each feature i
    ges = []
    for d in data:
        ges = concatenate((ges,d[:,i]))

    #standartisize the patient-population with total population
    for d in data:
        d[:,i] = zmap(d[:,i], ges)
In [11]:
## plotting histograms of single features from one patient exemplarily


for s in list_f:
    plt.figure()
    plt.grid(zorder=0)
    plt.hist(data[0][:,s], bins = 70, density=True, zorder =3, ec = 'black', fc = 'blue')
    plt.xlabel(labels[s], fontsize = 20)
    plt.ylabel('Frequency',fontsize = 20 )
    plt.xticks(fontsize = 15)
    plt.yticks(fontsize = 15)
    plt.xlim(-2.7,5.2)

    ax = plt.gca()
    ax.xaxis.set_tick_params(which='major', size=6, width=2, direction='out')
    ax.yaxis.set_tick_params(which='major', size=6, width=2, direction='out')

    os.makedirs(resultpath + 'Histograms', exist_ok = True)
    plt.savefig(resultpath + 'Histograms/' + labels[s] + '.svg', bbox_inches='tight',pad_inches = 0.02, transparent = True)
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
In [12]:
## draw point cloud and ellipses in 2d projection of feature space


fig = plt.figure(2)

# select features for 2d plane
i = 3
j = 6

for x in range(1):

    plt.title('Feature Space', fontsize=20)
    plt.xlabel(labels[i], fontsize=20)
    plt.ylabel(labels[j], fontsize=20)
    plt.xticks(fontsize=15)
    plt.yticks(fontsize=15)

    #for i=3, j=6
    plt.xlim(-1.8, 3.6)
    plt.ylim(-2.5, 2.1)

    #for i=4-, j=5
    #plt.xlim(-2.6, 1.4)
    #plt.ylim(-3.2, 3.3)
    #plt.yticks([-2,0,2])

    ax = plt.gca()
    ax.xaxis.set_tick_params(which='major', size=6, width=2, direction='in')
    ax.yaxis.set_tick_params(which='major', size=6, width=2, direction='in')
    colors = ['blue', 'cyan', 'dodgerblue', 'royalblue', 'slateblue', 'lightskyblue',
                        'red', 'tomato', 'crimson', 'darkorange', 'darkred', 'firebrick']

    # pick patient
    k = 0

    # draw ellipse by computing empirical covariance and solving eigen-problem
    cov = np.cov(data[k].T)
    # pick covariance entries of 2d Subspace
    cov2x2 = np.reshape([cov[i,i], cov[i,j], cov[j,i], cov[j,j]], (2,2))

    eigenvalues, eigenvectors = np.linalg.eig(cov2x2)

    theta = np.linspace(0, 2*pi, 1000)
    ellipsis = (np.sqrt(eigenvalues[None,:]) * eigenvectors) @ [np.sin(theta), np.cos(theta)]

    # draw point cloud
    plt.plot(data[k][:,i], data[k][:,j] , '.', ms=0.22,  c=colors[0])
    # draw ellipse
    plt.plot(ellipsis[0, :] + mean(data[k][:, i]), ellipsis[1, :] + mean(data[k][:, j]), label=k, c=colors[0], lw = 2.5)

    os.makedirs(resultpath + 'Feature Space', exist_ok=True)
    plt.savefig(resultpath + 'Feature Space/FeatureSpace-'+labels[i]+'-'+labels[j]+'.png', bbox_inches='tight', pad_inches=0.02, transparent=True, dpi=300)
    plt.show()
No description has been provided for this image
In [13]:
## draw ellipses - as representation of the gaussian approximation - of all patient in 2d subspace


plt.figure(figsize=(7,6))

# select features for 2d plane
i = 3
j = 5

for x in range(1):

    plt.title('Feature Space', fontsize=16)
    plt.xlabel(labels[i], fontsize=16)
    plt.ylabel(labels[j], fontsize=16)

    #for i=4, j=5
    #plt.xlim(-2.4, 2.8)
    #plt.ylim(-2.6, 2.6)

    #for i=3, j=5
    plt.xlim(-1.8, 3.5)
    plt.ylim(-2.6, 2.6)
    #plt.yticks([-2,0,2])

    ax = plt.gca()
    ax.xaxis.set_tick_params(which='major', size=6, width=2, direction='in')
    ax.yaxis.set_tick_params(which='major', size=6, width=2, direction='in')
    ax.grid(ls='--')
    colors = ['blue', 'cyan', 'dodgerblue', 'royalblue', 'slateblue', 'lightskyblue',
                        'red', 'tomato', 'crimson', 'darkorange', 'darkred', 'firebrick']

    # for all patient draw an ellipse
    for k in range(0,12):

        # compute empirical covariance matrix
        cov = np.cov(data[k].T)

        # pick covariance entries of 2d Subspace
        cov2x2 = np.reshape([cov[i,i], cov[i,j], cov[j,i], cov[j,j]], (2,2))

        eigenvalues, eigenvectors = np.linalg.eig(cov2x2)

        theta = np.linspace(0, 2*pi, 1000)
        ellipsis = (np.sqrt(eigenvalues[None,:]) * eigenvectors) @ [np.sin(theta), np.cos(theta)]

        plt.plot(ellipsis[0,:] + mean(data[k][:,i]), ellipsis[1,:] + mean(data[k][:,j]), label = k+1, c=colors[k], lw = 2.5 )


    plt.legend(bbox_to_anchor=(1,1), loc=1, frameon=False, fontsize=12, handletextpad = 0.4)

    os.makedirs(resultpath + 'Ellipses', exist_ok=True)
    plt.savefig(resultpath + 'Ellipses/Ellipses-'+labels[i]+'-'+labels[j]+'.svg', bbox_inches='tight', pad_inches=0.02, transparent=True, dpi=400)
    plt.show()
No description has been provided for this image
In [14]:
##  plot median values


fig = plt.figure(figsize = (12,7))

X1 = ones(6) * 0.5
X2 = ones(6) * 1

ax = fig.add_subplot(111)
ax.set_ylabel('Median over population ', fontsize=26)
# Turn off axis lines and ticks of the big subplot
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.tick_params(labelcolor='w', top=False, bottom=False, left=False, right=False)


# for each of the six feature
for k, s in enumerate(list_f):

    # plot median over population from each patients
    medians = []
    means = []              # only for features NN -> mean instead of median

    for d in data:
        medians.append(median(d[:,s]))
        means.append(mean(d[:,s]))

    fig.add_subplot(2, 3, k + 1)
    if k == 4:
        plt.plot(X1, means[0:6], '_', ms=30, lw=100, c='blue', label='CTRL')
        plt.plot(X2, means[6:12], '_', ms=30, c='red', label='MS')
        plt.plot(X1[0], mean(means[0:6]), '_', ms=50, c='black')
        plt.plot(X2[0], mean(means[6:12]), '_', ms=50, c='black')
    else:
        plt.plot(X1, medians[0:6], '_', ms=30, lw= 100, c = 'blue', label='CTRL')
        plt.plot(X2, medians[6:12], '_', ms=30, c='red', label='MS')
        plt.plot(X1[0], mean(medians[0:6]), '_', ms=50, c = 'black' )
        plt.plot(X2[0], mean(medians[6:12]), '_', ms=50, c = 'black' )
    plt.axvline(x=0.5, ls='--', c='grey')
    plt.axvline(x=1, ls='--', c='grey')
    ax = plt.gca()
    ax.xaxis.set_tick_params(which='major', size=6, width=2, direction='in')
    ax.yaxis.set_tick_params(which='major', size=6, width=2, direction='in')
    plt.title(labels[s])
    plt.xlim(0,1.5)
    plt.xticks(ticks = [0.5,1], labels = ['CTRL', 'MS'])

fig.tight_layout()

os.makedirs(resultpath + 'Median-Values', exist_ok=True)
plt.savefig(resultpath + 'Median-Values/Median-Values.svg',  bbox_inches='tight', pad_inches=0.02, transparent = True)
plt.show()
No description has been provided for this image
In [15]:
## create Violinplots


# for each feature:
for j,s in enumerate(list_f):
    v = []
    meds = []
    cb = []
    ct = []
    q1 = []
    q3 = []

    # since data are very scattered, an IQR filter is applied which cuts off the outermost 5% of the edges
    # from filterd data first and third quantile is calculated, shown as black bars in the plot
    for d in data:
        cut_bottom, med, cut_top = np.percentile(d[:, s], [5, 50, 95])

        # filter data
        filter = d[:,s].copy()
        filter = filter[filter > cut_bottom]
        filter = filter[filter < cut_top]

        #filtered data and mix/max of it
        v.append(filter)
        cb.append(cut_bottom)
        ct.append(cut_top)
        #save medians
        meds.append(med)
        # from filtered data compute first and third quantile
        q1.append(np.percentile(filter, [25]))
        q3.append(np.percentile(filter, [75]))


    plt.figure(figsize=(12, 5))

    ax = plt.gca()
    ax.set_axisbelow(True)
    ax.grid(ls='--')
    vplots = plt.violinplot(v, showmedians=False, showextrema=False, points = 200)

    inds = np.arange(1, len(meds) + 1)
    # plot medians as white dots
    plt.scatter(inds, meds, marker='o', color='white', s=30, zorder=3)
    plt.vlines(inds, array(cb), array(ct), color='Black', linestyle='-', lw=1)
    #plot quantiles
    plt.vlines(inds, array(q1), array(q3), color='Black', linestyle='-', lw=5)

    plt.xticks(ticks = inds, labels = inds, fontsize = 15 )
    plt.yticks(fontsize=15)
    plt.xlabel('Subject Number', fontsize = 26)
    plt.ylabel(labels[s], fontsize = 26)

    # set colors
    for pc,i in zip(vplots['bodies'],range(12)):
        if i < 6:
            pc.set_facecolor('blue')
            pc.set_edgecolor('Darkblue')
            pc.set_alpha(0.75)
        else:
            pc.set_facecolor('red')
            pc.set_edgecolor('Darkred')
            pc.set_alpha(0.75)

    # customize legend
    import matplotlib.patches as mpatches
    red_patch = mpatches.Patch(color='red')
    blue_patch = mpatches.Patch(color='blue')
    l = ['Control', 'MS']
    legend_pos = [2,2,2,3,2,1]
    plt.legend(loc=legend_pos[j], handles=[blue_patch,red_patch], labels=l, fontsize=13, handletextpad=0.35, edgecolor='black', frameon=True, fancybox=False)

    os.makedirs(resultpath + 'Violin-Plots', exist_ok=True)
    plt.savefig(resultpath + 'Violin-Plots/' + labels[s] + '-Violinplot.svg', bbox_inches='tight', pad_inches=0.02, transparent = True)
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
In [16]:
## creating a new variable which contains only feature columns used for OT-analysis
# name it cdata

# to reduce computation time for solving transport problems, 
# the further analysis is probed on small sub-datasets where num_rows indicates number of nuclei per sample 
num_rows = 500

cdata = []
for i, d in enumerate(data):
    chosen_data = data[i][:,[3,4,5,6,7,8]]
    rows = np.random.choice(data[i].shape[0], num_rows, replace=False)
    cdata.append(chosen_data[rows,:])

    # save chosen data 
    savetxt(fileroot + 'pts_{:03d}'.format(i), chosen_data[rows,:])

# Features Columns in 'cdata'
# 0 = Volume
# 1 = Electron Density
# 2 = Heterogenity
# 3 = Sphericity
# 4 = Number of neighbors
# 5 = Distance to nearest neighbors

OT ANALYSIS 1D FEATURE HISTOGRAMS

In [17]:
## Enter number of samples and number of features here.
nSamples = 12
nFeat = 6
In [18]:
#### Wassserstein Distance chart: feature histograms


# calculate pairwise W2 distance between feature histograms of patients
# function gets 1d feature histograms of samples as input and return matrix containg the distances
def W2_distance_charts(data, f):

    l = len(data)
    chart = zeros((l,l))

    for i in range(l):
        for j in range(l):

            x = cdata[i][:,f]
            y = cdata[j][:,f]

            dist = sqrt(ot.emd2_1d(x, y))   # Wasserstein-2 distance

            chart[i,j] = dist

    return chart
In [19]:
## compute charts for each feature separately and store it

feature_charts = []
for i in range(nFeat):
    print(i)
    chart = W2_distance_charts(cdata, i)
    feature_charts.append(chart)
0
1
2
3
4
5
In [20]:
## create own colorbar out of the 'Blues' cmap, just for better contrast in charts


from matplotlib.colors import LinearSegmentedColormap
from matplotlib import cm

def shiftedColorMap(cmap, start=0, midpoint=0.5, stop=1.0, name='shiftedcmap'):

    cdict = {
        'red': [],
        'green': [],
        'blue': [],
        'alpha': []
    }

    # regular index to compute the colors
    reg_index = np.linspace(start, stop, 257)

    # shifted index to match the data
    shift_index = np.hstack([
        np.linspace(0.0, midpoint, 128, endpoint=False),
        np.linspace(midpoint, 1.0, 129, endpoint=True)
    ])

    for ri, si in zip(reg_index, shift_index):
        r, g, b, a = cmap(ri)

        cdict['red'].append((si, r, r))
        cdict['green'].append((si, g, g))
        cdict['blue'].append((si, b, b))
        cdict['alpha'].append((si, a, a))

    newcmap = LinearSegmentedColormap(name, cdict)

    return newcmap

blues = cm.get_cmap('Blues')
mycmap = shiftedColorMap(blues, start=0, midpoint=0.35, stop=1.0, name='shifted')
/tmp/ipykernel_163/2862559247.py:37: MatplotlibDeprecationWarning: The get_cmap function was deprecated in Matplotlib 3.7 and will be removed two minor releases later. Use ``matplotlib.colormaps[name]`` or ``matplotlib.colormaps.get_cmap(obj)`` instead.
  blues = cm.get_cmap('Blues')
In [21]:
## plot W-matrix-charts

from mpl_toolkits.axes_grid1 import make_axes_locatable

for i,j in zip(list_f,range(6)):

    plt.figure(figsize=(8,8))
    plt.title('Wasserstein Distance - ' + labels[i], fontsize=20)

    ax = plt.gca()
    im = ax.imshow(feature_charts[j], cmap=mycmap)    # own cmap
    plt.axvline(x=5.5, ls='--', c='black', lw=2)
    plt.axhline(y=5.5, ls='--', c='black', lw=2)
    locs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    lbl = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    plt.xticks(ticks=locs, labels=lbl, fontsize=15)
    plt.yticks(ticks=locs, labels=lbl, fontsize=15)
    divider = make_axes_locatable(ax)
    cax = divider.append_axes("right", size="5%", pad=0.09)

    if j == 1:
        cb = plt.colorbar(im, cax=cax, ticks=[0.0,1.0,2.0,3.0])
    else:
        cb = plt.colorbar(im, cax=cax, ticks=[0,0.5,1,1.5,2])
    cb.ax.tick_params(size=4, width=2, labelsize=15)
    ax.xaxis.set_tick_params(which='major', size=4, width=2, direction='out')
    ax.yaxis.set_tick_params(which='major', size=4, width=2, direction='out')

    os.makedirs(resultpath + 'W-feature-charts', exist_ok=True)
    plt.savefig(resultpath + 'W-feature-charts/W-' + labels[i] + '-chart.svg', bbox_inches='tight', pad_inches=0.02, transparent = True)
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

PREPARATION FOR MULTIDIMENSIONAL OT-ANALYSIS

In [22]:
## import OT library written by Bernhard Schmitzer (unpublished)

import sys
# sys.path.append("../../../python")
sys.path.append("./")
from lib.misc import *
import lib.SinkhornNP as Sinkhorn
import lib.LinW2 as LinW2
In [23]:
## for gaussian approxiamtion of point clouds: compute empirical means and cov matrices
# since analysis requires only cov and mean, no actual pointcloud is sampled from that

# since analysis requires only cov and mean, no actual pointcloud is sampled from that

covMatrices = zeros((nSamples, nFeat, nFeat))
means = zeros((nSamples, nFeat))

for i in range(nSamples):
    covMatrices[i, :, :] = np.cov(cdata[i], rowvar=False, bias=True)

    # Subjects in columns und features in rows
    for j in range(nFeat):
        means[i, j] = mean(cdata[i][:, j])
In [24]:
## save covs, means, sample tags and classlabels


save(fileroot + 'matList', covMatrices)
savetxt(fileroot + 'meanList' , means)

sampleTags = ['6716', '6916', '2616', '5416', '12816', '6515', '12006', 'T800', '11313', '13609', '22091', '3614']  #Subject numbers
savetxt(fileroot + 'sampleTags', sampleTags, fmt = '%s')

classes = [0,0,0,0,0,0,1,1,1,1,1,1]
savetxt(fileroot + 'classes' , classes)
In [25]:
## compute Wasserstein barycenter, sample from that and also store it


weights=np.full(nSamples,1./nSamples,dtype=np.double)

# compute barycenter with 'fixed point algorithm' (Alvarez-Esteban, 2016)
matBar = barycenter(covMatrices,weights)
meanBar = np.mean(means,axis=0)

# sample from center (only for point clouds analysis needed )
rng = np.random.default_rng()
nPts = 500
ref_sample = sampleFromGaussian(matBar,meanBar,nPts,rng)

save(fileroot + 'pts_ref', ref_sample)
In [26]:
## put this file manually in folder: contains chosen paramters for entropic regularization


with open("Data/params.txt", "r") as f:
    params = json.load(f)
    f.close()

nSamples = params["nSamples"]
epsTarget = params["epsTarget"]
epsInit = params["epsInit"]
SinkhornErrorGoal = params["SinkhornErrorGoal"]
keep = params["keep"]
epsStep = .667
verbose = True


##
# number of particles in barycenter
num_ref_sample = ref_sample.shape[0]
# weights for particles of barycenter (here uniform)
mu_ref_sample = np.full(num_ref_sample,1./num_ref_sample)

NEXT CELL: SOLVING THE TRANSPORT PROBLEM (POSSIBLY LONG EXECUTION TIME!)

In [27]:
## solve transport problems from reference sample (barycenter) to samples with entropic regularization
# returns the optimal couplings pi

# Computation time on full dataset: about 10 hours, ca 40 min for one sample
# -> reason why datasets are reduced to e.g. 500 nuclei per sample

start = time()

for i in range(len(cdata)):
    print(i)

    ncdata = cdata[i].shape[0]
    mucdata = np.full(ncdata, 1. / ncdata)

    cost = getCostEuclidean(ref_sample, cdata[i])

    # Solve transport problem with entropic regularization
    solverDat = Sinkhorn.SolveW2(mu_ref_sample, ref_sample, mucdata, cdata[i], SinkhornErrorGoal, epsTarget, epsInit, returnSolver=True,
                             epsStep=epsStep, verbose=verbose)
    solver = solverDat[2]

    save(fileroot + 'sol_{:03d}_alpha'.format(i), solver.alpha)
    save(fileroot + 'sol_{:03d}_beta'.format(i), solver.beta)

    print('Nummer ' + str(i+1) + ' fertig')
    print('____________________________')

end = time()
print('Computation time in sec: ',end - start)
0
eps: 100.000000
	error: 2.038300e-17
	final absorption
eps: 67.001875
	error: 1.647987e-17
	final absorption
eps: 44.892513
	error: 0.000000e+00
	final absorption
eps: 30.078825
	error: 4.770490e-17
	final absorption
eps: 20.153377
	error: 0.000000e+00
	final absorption
eps: 13.503140
	error: 0.000000e+00
	final absorption
eps: 9.047357
	error: 4.250073e-17
	final absorption
eps: 6.061899
	error: 0.000000e+00
	final absorption
eps: 4.061586
	error: 1.084202e-17
	final absorption
eps: 2.721339
	error: 3.512815e-17
	final absorption
eps: 1.823348
	error: 0.000000e+00
	final absorption
eps: 1.221677
	error: 4.770490e-18
	final absorption
eps: 0.818547
	error: 1.414801e-13
	final absorption
eps: 0.548442
	error: 2.915858e-08
	final absorption
eps: 0.367466
	error: 9.717612e-06
	final absorption
eps: 0.246209
	error: 8.210157e-06
	final absorption
eps: 0.164965
	error: 3.787404e-05
	final absorption
eps: 0.110530
	error: 6.991614e-05
	final absorption
eps: 0.074057
	error: 9.908547e-05
	final absorption
eps: 0.049619
	error: 2.628817e-04
	final absorption
eps: 0.033246
	error: 6.113973e-04
	final absorption
eps: 0.022275
	error: 8.145685e-04
	final absorption
eps: 0.014925
	error: 7.722386e-04
	final absorption
eps: 0.010000
	error: 7.424840e-04
	final absorption
eps: 0.006700
	error: 6.792284e-04
	final absorption
eps: 0.004489
	error: 9.250817e-04
	final absorption
eps: 0.003008
	error: 1.165461e-03
	error: 7.376723e-04
	final absorption
eps: 0.002015
	error: 9.864332e-04
	final absorption
eps: 0.001350
	error: 9.875961e-04
	final absorption
eps: 0.000905
	error: 8.531238e-04
	final absorption
eps: 0.000606
	error: 7.032688e-04
	final absorption
eps: 0.000406
	error: 5.465454e-04
	final absorption
eps: 0.000272
	error: 3.510187e-04
	final absorption
eps: 0.000182
	error: 1.551206e-04
	final absorption
eps: 0.000122
	error: 4.096818e-05
	final absorption
eps: 0.000082
	error: 6.554698e-06
	final absorption
eps: 0.000055
	error: 1.426105e-06
	final absorption
eps: 0.000037
	error: 1.482514e-07
	final absorption
eps: 0.000025
	error: 4.202075e-09
	final absorption
eps: 0.000016
	error: 1.691112e-11
	final absorption
eps: 0.000011
	error: 3.697997e-15
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 1 fertig
____________________________
1
eps: 100.000000
	error: 0.000000e+00
	final absorption
eps: 67.001875
	error: 1.474515e-17
	final absorption
eps: 44.892513
	error: 0.000000e+00
	final absorption
eps: 30.078825
	error: 4.683753e-17
	final absorption
eps: 20.153377
	error: 0.000000e+00
	final absorption
eps: 13.503140
	error: 2.602085e-18
	final absorption
eps: 9.047357
	error: 2.211772e-17
	final absorption
eps: 6.061899
	error: 9.540979e-18
	final absorption
eps: 4.061586
	error: 0.000000e+00
	final absorption
eps: 2.721339
	error: 1.734723e-18
	final absorption
eps: 1.823348
	error: 0.000000e+00
	final absorption
eps: 1.221677
	error: 6.938894e-18
	final absorption
eps: 0.818547
	error: 1.166211e-14
	final absorption
eps: 0.548442
	error: 9.422518e-08
	final absorption
eps: 0.367466
	error: 1.249356e-05
	final absorption
eps: 0.246209
	error: 3.552346e-06
	final absorption
eps: 0.164965
	error: 2.124332e-05
	final absorption
eps: 0.110530
	error: 4.830594e-05
	final absorption
eps: 0.074057
	error: 1.046119e-04
	final absorption
eps: 0.049619
	error: 1.893275e-04
	final absorption
eps: 0.033246
	error: 3.989406e-04
	final absorption
eps: 0.022275
	error: 6.185392e-04
	final absorption
eps: 0.014925
	error: 7.571908e-04
	final absorption
eps: 0.010000
	error: 8.481400e-04
	final absorption
eps: 0.006700
	error: 9.620880e-04
	final absorption
eps: 0.004489
	error: 1.234058e-03
	error: 7.898171e-04
	final absorption
eps: 0.003008
	error: 1.133759e-03
	error: 8.431951e-04
	final absorption
eps: 0.002015
	error: 9.085252e-04
	final absorption
eps: 0.001350
	error: 7.272775e-04
	final absorption
eps: 0.000905
	error: 4.686673e-04
	final absorption
eps: 0.000606
	error: 2.681994e-04
	final absorption
eps: 0.000406
	error: 1.624178e-04
	final absorption
eps: 0.000272
	error: 8.258159e-05
	final absorption
eps: 0.000182
	error: 3.183228e-05
	final absorption
eps: 0.000122
	error: 1.005365e-05
	final absorption
eps: 0.000082
	error: 2.206188e-06
	final absorption
eps: 0.000055
	error: 2.105649e-07
	final absorption
eps: 0.000037
	error: 5.237813e-09
	final absorption
eps: 0.000025
	error: 1.737525e-11
	final absorption
eps: 0.000016
	error: 2.855355e-15
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 2 fertig
____________________________
2
eps: 100.000000
	error: 0.000000e+00
	final absorption
eps: 67.001875
	error: 5.854692e-17
	final absorption
eps: 44.892513
	error: 0.000000e+00
	final absorption
eps: 30.078825
	error: 0.000000e+00
	final absorption
eps: 20.153377
	error: 0.000000e+00
	final absorption
eps: 13.503140
	error: 1.691355e-17
	final absorption
eps: 9.047357
	error: 0.000000e+00
	final absorption
eps: 6.061899
	error: 3.339343e-17
	final absorption
eps: 4.061586
	error: 1.214306e-17
	final absorption
eps: 2.721339
	error: 1.257675e-17
	final absorption
eps: 1.823348
	error: 2.385245e-17
	final absorption
eps: 1.221677
	error: 3.589117e-13
	final absorption
eps: 0.818547
	error: 3.298644e-09
	final absorption
eps: 0.548442
	error: 2.797097e-06
	final absorption
eps: 0.367466
	error: 4.228682e-05
	final absorption
eps: 0.246209
	error: 5.342369e-05
	final absorption
eps: 0.164965
	error: 1.148400e-04
	final absorption
eps: 0.110530
	error: 1.815558e-04
	final absorption
eps: 0.074057
	error: 2.531417e-04
	final absorption
eps: 0.049619
	error: 3.200972e-04
	final absorption
eps: 0.033246
	error: 4.031080e-04
	final absorption
eps: 0.022275
	error: 5.929648e-04
	final absorption
eps: 0.014925
	error: 6.455782e-04
	final absorption
eps: 0.010000
	error: 6.701952e-04
	final absorption
eps: 0.006700
	error: 7.571662e-04
	final absorption
eps: 0.004489
	error: 7.882563e-04
	final absorption
eps: 0.003008
	error: 7.654259e-04
	final absorption
eps: 0.002015
	error: 7.451173e-04
	final absorption
eps: 0.001350
	error: 6.610340e-04
	final absorption
eps: 0.000905
	error: 4.812363e-04
	final absorption
eps: 0.000606
	error: 2.834902e-04
	final absorption
eps: 0.000406
	error: 1.310622e-04
	final absorption
eps: 0.000272
	error: 3.904479e-05
	final absorption
eps: 0.000182
	error: 6.082804e-06
	final absorption
eps: 0.000122
	error: 3.990332e-07
	final absorption
eps: 0.000082
	error: 5.294407e-09
	final absorption
eps: 0.000055
	error: 7.088588e-12
	final absorption
eps: 0.000037
	error: 3.569194e-16
	final absorption
eps: 0.000025
	error: 0.000000e+00
	final absorption
eps: 0.000016
	error: 0.000000e+00
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 3 fertig
____________________________
3
eps: 100.000000
	error: 0.000000e+00
	final absorption
eps: 67.001875
	error: 5.507747e-17
	final absorption
eps: 44.892513
	error: 3.642919e-17
	final absorption
eps: 30.078825
	error: 0.000000e+00
	final absorption
eps: 20.153377
	error: 8.673617e-19
	final absorption
eps: 13.503140
	error: 1.040834e-17
	final absorption
eps: 9.047357
	error: 1.734723e-18
	final absorption
eps: 6.061899
	error: 2.255141e-17
	final absorption
eps: 4.061586
	error: 0.000000e+00
	final absorption
eps: 2.721339
	error: 4.033232e-17
	final absorption
eps: 1.823348
	error: 0.000000e+00
	final absorption
eps: 1.221677
	error: 2.385245e-17
	final absorption
eps: 0.818547
	error: 3.021368e-14
	final absorption
eps: 0.548442
	error: 8.062145e-11
	final absorption
eps: 0.367466
	error: 2.384479e-07
	final absorption
eps: 0.246209
	error: 2.123893e-05
	final absorption
eps: 0.164965
	error: 5.935898e-05
	final absorption
eps: 0.110530
	error: 9.813296e-05
	final absorption
eps: 0.074057
	error: 1.197474e-04
	final absorption
eps: 0.049619
	error: 2.626040e-04
	final absorption
eps: 0.033246
	error: 4.797362e-04
	final absorption
eps: 0.022275
	error: 8.586279e-04
	final absorption
eps: 0.014925
	error: 1.340054e-03
	error: 5.209287e-04
	final absorption
eps: 0.010000
	error: 1.180852e-03
	error: 5.162754e-04
	final absorption
eps: 0.006700
	error: 1.113392e-03
	error: 5.683558e-04
	final absorption
eps: 0.004489
	error: 1.085277e-03
	error: 6.523595e-04
	final absorption
eps: 0.003008
	error: 1.254146e-03
	error: 8.430796e-04
	final absorption
eps: 0.002015
	error: 1.251383e-03
	error: 8.321299e-04
	final absorption
eps: 0.001350
	error: 7.956024e-04
	final absorption
eps: 0.000905
	error: 5.533566e-04
	final absorption
eps: 0.000606
	error: 2.913923e-04
	final absorption
eps: 0.000406
	error: 9.447980e-05
	final absorption
eps: 0.000272
	error: 1.578426e-05
	final absorption
eps: 0.000182
	error: 2.675639e-06
	final absorption
eps: 0.000122
	error: 7.481590e-06
	final absorption
eps: 0.000082
	error: 7.790096e-06
	final absorption
eps: 0.000055
	error: 4.046478e-06
	final absorption
eps: 0.000037
	error: 1.132736e-06
	final absorption
eps: 0.000025
	error: 1.027229e-07
	final absorption
eps: 0.000016
	error: 2.131371e-09
	final absorption
eps: 0.000011
	error: 5.346532e-12
	final absorption
eps: 0.000007
	error: 5.789640e-16
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 4 fertig
____________________________
4
eps: 100.000000
	error: 3.903128e-17
	final absorption
eps: 67.001875
	error: 6.548581e-17
	final absorption
eps: 44.892513
	error: 2.992398e-17
	final absorption
eps: 30.078825
	error: 0.000000e+00
	final absorption
eps: 20.153377
	error: 3.816392e-17
	final absorption
eps: 13.503140
	error: 0.000000e+00
	final absorption
eps: 9.047357
	error: 6.071532e-18
	final absorption
eps: 6.061899
	error: 2.645453e-17
	final absorption
eps: 4.061586
	error: 0.000000e+00
	final absorption
eps: 2.721339
	error: 2.645453e-17
	final absorption
eps: 1.823348
	error: 1.691355e-17
	final absorption
eps: 1.221677
	error: 1.561251e-17
	final absorption
eps: 0.818547
	error: 9.230117e-13
	final absorption
eps: 0.548442
	error: 5.687233e-09
	final absorption
eps: 0.367466
	error: 1.428184e-06
	final absorption
eps: 0.246209
	error: 8.025463e-06
	final absorption
eps: 0.164965
	error: 1.304819e-05
	final absorption
eps: 0.110530
	error: 5.904539e-05
	final absorption
eps: 0.074057
	error: 1.200659e-04
	final absorption
eps: 0.049619
	error: 1.651074e-04
	final absorption
eps: 0.033246
	error: 3.792862e-04
	final absorption
eps: 0.022275
	error: 7.492291e-04
	final absorption
eps: 0.014925
	error: 1.058110e-03
	error: 4.136961e-04
	final absorption
eps: 0.010000
	error: 1.128156e-03
	error: 4.563793e-04
	final absorption
eps: 0.006700
	error: 9.922200e-04
	final absorption
eps: 0.004489
	error: 8.440314e-04
	final absorption
eps: 0.003008
	error: 5.506258e-04
	final absorption
eps: 0.002015
	error: 3.619864e-04
	final absorption
eps: 0.001350
	error: 2.002418e-04
	final absorption
eps: 0.000905
	error: 6.355818e-05
	final absorption
eps: 0.000606
	error: 1.111809e-05
	final absorption
eps: 0.000406
	error: 9.450527e-07
	final absorption
eps: 0.000272
	error: 4.997169e-08
	final absorption
eps: 0.000182
	error: 2.399555e-09
	final absorption
eps: 0.000122
	error: 4.655253e-11
	final absorption
eps: 0.000082
	error: 1.262480e-13
	final absorption
eps: 0.000055
	error: 1.561251e-17
	final absorption
eps: 0.000037
	error: 0.000000e+00
	final absorption
eps: 0.000025
	error: 0.000000e+00
	final absorption
eps: 0.000016
	error: 0.000000e+00
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 5 fertig
____________________________
5
eps: 100.000000
	error: 0.000000e+00
	final absorption
eps: 67.001875
	error: 4.510281e-17
	final absorption
eps: 44.892513
	error: 3.079134e-17
	final absorption
eps: 30.078825
	error: 1.214306e-17
	final absorption
eps: 20.153377
	error: 6.505213e-17
	final absorption
eps: 13.503140
	error: 2.602085e-17
	final absorption
eps: 9.047357
	error: 0.000000e+00
	final absorption
eps: 6.061899
	error: 0.000000e+00
	final absorption
eps: 4.061586
	error: 4.076600e-17
	final absorption
eps: 2.721339
	error: 0.000000e+00
	final absorption
eps: 1.823348
	error: 0.000000e+00
	final absorption
eps: 1.221677
	error: 3.382711e-16
	final absorption
eps: 0.818547
	error: 4.132978e-11
	final absorption
eps: 0.548442
	error: 2.392356e-07
	final absorption
eps: 0.367466
	error: 1.408450e-05
	final absorption
eps: 0.246209
	error: 2.356647e-05
	final absorption
eps: 0.164965
	error: 6.477200e-05
	final absorption
eps: 0.110530
	error: 1.420938e-04
	final absorption
eps: 0.074057
	error: 2.088826e-04
	final absorption
eps: 0.049619
	error: 2.227946e-04
	final absorption
eps: 0.033246
	error: 5.805250e-04
	final absorption
eps: 0.022275
	error: 9.640050e-04
	final absorption
eps: 0.014925
	error: 1.199404e-03
	error: 5.181598e-04
	final absorption
eps: 0.010000
	error: 1.084803e-03
	error: 4.462917e-04
	final absorption
eps: 0.006700
	error: 1.086586e-03
	error: 4.363392e-04
	final absorption
eps: 0.004489
	error: 1.218016e-03
	error: 5.792562e-04
	final absorption
eps: 0.003008
	error: 1.259615e-03
	error: 7.252980e-04
	final absorption
eps: 0.002015
	error: 1.262262e-03
	error: 8.146424e-04
	final absorption
eps: 0.001350
	error: 1.132873e-03
	error: 7.959299e-04
	final absorption
eps: 0.000905
	error: 9.051915e-04
	final absorption
eps: 0.000606
	error: 9.949606e-04
	final absorption
eps: 0.000406
	error: 1.160428e-03
	error: 8.646520e-04
	final absorption
eps: 0.000272
	error: 9.992701e-04
	final absorption
eps: 0.000182
	error: 1.034229e-03
	error: 7.439370e-04
	final absorption
eps: 0.000122
	error: 7.174601e-04
	final absorption
eps: 0.000082
	error: 5.634435e-04
	final absorption
eps: 0.000055
	error: 3.253795e-04
	final absorption
eps: 0.000037
	error: 1.265927e-04
	final absorption
eps: 0.000025
	error: 3.506786e-05
	final absorption
eps: 0.000016
	error: 8.161771e-06
	final absorption
eps: 0.000011
	error: 1.188028e-06
	final absorption
eps: 0.000007
	error: 5.766725e-08
	final absorption
eps: 0.000005
	error: 5.197077e-10
	final absorption
eps: 0.000003
	error: 3.812011e-13
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 6 fertig
____________________________
6
eps: 100.000000
	error: 0.000000e+00
	final absorption
eps: 67.001875
	error: 1.994932e-17
	final absorption
eps: 44.892513
	error: 2.385245e-17
	final absorption
eps: 30.078825
	error: 0.000000e+00
	final absorption
eps: 20.153377
	error: 0.000000e+00
	final absorption
eps: 13.503140
	error: 0.000000e+00
	final absorption
eps: 9.047357
	error: 1.821460e-17
	final absorption
eps: 6.061899
	error: 2.255141e-17
	final absorption
eps: 4.061586
	error: 2.168404e-17
	final absorption
eps: 2.721339
	error: 1.040834e-17
	final absorption
eps: 1.823348
	error: 3.165870e-17
	final absorption
eps: 1.221677
	error: 1.717168e-09
	final absorption
eps: 0.818547
	error: 8.317774e-06
	final absorption
eps: 0.548442
	error: 1.837297e-05
	final absorption
eps: 0.367466
	error: 5.292801e-06
	final absorption
eps: 0.246209
	error: 7.274076e-06
	final absorption
eps: 0.164965
	error: 1.470997e-05
	final absorption
eps: 0.110530
	error: 8.092128e-05
	final absorption
eps: 0.074057
	error: 2.443667e-04
	final absorption
eps: 0.049619
	error: 4.085459e-04
	final absorption
eps: 0.033246
	error: 5.056677e-04
	final absorption
eps: 0.022275
	error: 7.316850e-04
	final absorption
eps: 0.014925
	error: 1.025736e-03
	error: 4.598869e-04
	final absorption
eps: 0.010000
	error: 1.043003e-03
	error: 5.078249e-04
	final absorption
eps: 0.006700
	error: 9.669927e-04
	final absorption
eps: 0.004489
	error: 1.227943e-03
	error: 6.904581e-04
	final absorption
eps: 0.003008
	error: 1.241448e-03
	error: 9.230462e-04
	final absorption
eps: 0.002015
	error: 1.239475e-03
	error: 1.016908e-03
	error: 8.652833e-04
	final absorption
eps: 0.001350
	error: 8.468654e-04
	final absorption
eps: 0.000905
	error: 5.852056e-04
	final absorption
eps: 0.000606
	error: 2.905277e-04
	final absorption
eps: 0.000406
	error: 9.439186e-05
	final absorption
eps: 0.000272
	error: 1.856388e-05
	final absorption
eps: 0.000182
	error: 2.983730e-06
	final absorption
eps: 0.000122
	error: 2.351492e-07
	final absorption
eps: 0.000082
	error: 4.680812e-09
	final absorption
eps: 0.000055
	error: 1.922806e-11
	final absorption
eps: 0.000037
	error: 4.461796e-14
	final absorption
eps: 0.000025
	error: 1.214306e-17
	final absorption
eps: 0.000016
	error: 0.000000e+00
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 7 fertig
____________________________
7
eps: 100.000000
	error: 1.474515e-17
	final absorption
eps: 67.001875
	error: 2.515349e-17
	final absorption
eps: 44.892513
	error: 1.301043e-17
	final absorption
eps: 30.078825
	error: 4.900594e-17
	final absorption
eps: 20.153377
	error: 0.000000e+00
	final absorption
eps: 13.503140
	error: 0.000000e+00
	final absorption
eps: 9.047357
	error: 0.000000e+00
	final absorption
eps: 6.061899
	error: 2.298509e-17
	final absorption
eps: 4.061586
	error: 3.642919e-17
	final absorption
eps: 2.721339
	error: 0.000000e+00
	final absorption
eps: 1.823348
	error: 1.734723e-18
	final absorption
eps: 1.221677
	error: 4.948299e-16
	final absorption
eps: 0.818547
	error: 8.621090e-11
	final absorption
eps: 0.548442
	error: 1.144859e-06
	final absorption
eps: 0.367466
	error: 2.052806e-05
	final absorption
eps: 0.246209
	error: 4.810816e-05
	final absorption
eps: 0.164965
	error: 2.135135e-05
	final absorption
eps: 0.110530
	error: 3.907770e-05
	final absorption
eps: 0.074057
	error: 1.546421e-04
	final absorption
eps: 0.049619
	error: 2.646465e-04
	final absorption
eps: 0.033246
	error: 3.500397e-04
	final absorption
eps: 0.022275
	error: 6.353336e-04
	final absorption
eps: 0.014925
	error: 9.335699e-04
	final absorption
eps: 0.010000
	error: 1.119800e-03
	error: 5.720412e-04
	final absorption
eps: 0.006700
	error: 9.390910e-04
	final absorption
eps: 0.004489
	error: 1.020357e-03
	error: 6.088163e-04
	final absorption
eps: 0.003008
	error: 1.037576e-03
	error: 5.992824e-04
	final absorption
eps: 0.002015
	error: 1.080470e-03
	error: 6.017681e-04
	final absorption
eps: 0.001350
	error: 8.955566e-04
	final absorption
eps: 0.000905
	error: 8.998010e-04
	final absorption
eps: 0.000606
	error: 7.560952e-04
	final absorption
eps: 0.000406
	error: 5.491146e-04
	final absorption
eps: 0.000272
	error: 3.697397e-04
	final absorption
eps: 0.000182
	error: 2.382326e-04
	final absorption
eps: 0.000122
	error: 1.280334e-04
	final absorption
eps: 0.000082
	error: 5.527570e-05
	final absorption
eps: 0.000055
	error: 2.303918e-05
	final absorption
eps: 0.000037
	error: 8.885484e-06
	final absorption
eps: 0.000025
	error: 2.167142e-06
	final absorption
eps: 0.000016
	error: 1.892416e-07
	final absorption
eps: 0.000011
	error: 3.789416e-09
	final absorption
eps: 0.000007
	error: 9.037300e-12
	final absorption
eps: 0.000005
	error: 9.085614e-16
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 8 fertig
____________________________
8
eps: 100.000000
	error: 1.561251e-17
	final absorption
eps: 67.001875
	error: 0.000000e+00
	final absorption
eps: 44.892513
	error: 0.000000e+00
	final absorption
eps: 30.078825
	error: 1.431147e-17
	final absorption
eps: 20.153377
	error: 1.561251e-17
	final absorption
eps: 13.503140
	error: 0.000000e+00
	final absorption
eps: 9.047357
	error: 3.686287e-17
	final absorption
eps: 6.061899
	error: 1.691355e-17
	final absorption
eps: 4.061586
	error: 2.775558e-17
	final absorption
eps: 2.721339
	error: 0.000000e+00
	final absorption
eps: 1.823348
	error: 0.000000e+00
	final absorption
eps: 1.221677
	error: 4.293441e-17
	final absorption
eps: 0.818547
	error: 7.298849e-16
	final absorption
eps: 0.548442
	error: 2.070665e-11
	final absorption
eps: 0.367466
	error: 8.941069e-09
	final absorption
eps: 0.246209
	error: 5.800016e-06
	final absorption
eps: 0.164965
	error: 3.067368e-05
	final absorption
eps: 0.110530
	error: 5.172748e-05
	final absorption
eps: 0.074057
	error: 1.201805e-04
	final absorption
eps: 0.049619
	error: 2.874860e-04
	final absorption
eps: 0.033246
	error: 5.231535e-04
	final absorption
eps: 0.022275
	error: 7.805167e-04
	final absorption
eps: 0.014925
	error: 1.137032e-03
	error: 5.626472e-04
	final absorption
eps: 0.010000
	error: 1.147746e-03
	error: 6.235512e-04
	final absorption
eps: 0.006700
	error: 1.194092e-03
	error: 7.219883e-04
	final absorption
eps: 0.004489
	error: 1.250563e-03
	error: 8.136483e-04
	final absorption
eps: 0.003008
	error: 9.573966e-04
	final absorption
eps: 0.002015
	error: 7.511420e-04
	final absorption
eps: 0.001350
	error: 6.012365e-04
	final absorption
eps: 0.000905
	error: 4.840911e-04
	final absorption
eps: 0.000606
	error: 3.302526e-04
	final absorption
eps: 0.000406
	error: 1.611648e-04
	final absorption
eps: 0.000272
	error: 4.680379e-05
	final absorption
eps: 0.000182
	error: 6.313432e-06
	final absorption
eps: 0.000122
	error: 2.834723e-07
	final absorption
eps: 0.000082
	error: 2.612017e-09
	final absorption
eps: 0.000055
	error: 2.354311e-12
	final absorption
eps: 0.000037
	error: 6.722053e-17
	final absorption
eps: 0.000025
	error: 0.000000e+00
	final absorption
eps: 0.000016
	error: 0.000000e+00
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 9 fertig
____________________________
9
eps: 100.000000
	error: 4.597017e-17
	final absorption
eps: 67.001875
	error: 0.000000e+00
	final absorption
eps: 44.892513
	error: 2.038300e-17
	final absorption
eps: 30.078825
	error: 0.000000e+00
	final absorption
eps: 20.153377
	error: 2.515349e-17
	final absorption
eps: 13.503140
	error: 2.385245e-17
	final absorption
eps: 9.047357
	error: 4.119968e-17
	final absorption
eps: 6.061899
	error: 0.000000e+00
	final absorption
eps: 4.061586
	error: 2.255141e-17
	final absorption
eps: 2.721339
	error: 2.818926e-17
	final absorption
eps: 1.823348
	error: 7.979728e-17
	final absorption
eps: 1.221677
	error: 2.299380e-12
	final absorption
eps: 0.818547
	error: 7.246656e-07
	final absorption
eps: 0.548442
	error: 1.545404e-05
	final absorption
eps: 0.367466
	error: 2.002016e-05
	final absorption
eps: 0.246209
	error: 2.131541e-05
	final absorption
eps: 0.164965
	error: 4.037980e-05
	final absorption
eps: 0.110530
	error: 5.459897e-05
	final absorption
eps: 0.074057
	error: 1.702845e-04
	final absorption
eps: 0.049619
	error: 3.583658e-04
	final absorption
eps: 0.033246
	error: 4.965092e-04
	final absorption
eps: 0.022275
	error: 6.504082e-04
	final absorption
eps: 0.014925
	error: 8.034660e-04
	final absorption
eps: 0.010000
	error: 1.052706e-03
	error: 4.697848e-04
	final absorption
eps: 0.006700
	error: 1.089764e-03
	error: 6.006003e-04
	final absorption
eps: 0.004489
	error: 1.437341e-03
	error: 9.729726e-04
	final absorption
eps: 0.003008
	error: 1.654504e-03
	error: 1.140832e-03
	error: 8.293662e-04
	final absorption
eps: 0.002015
	error: 1.271398e-03
	error: 9.648017e-04
	final absorption
eps: 0.001350
	error: 1.218927e-03
	error: 9.779444e-04
	final absorption
eps: 0.000905
	error: 9.957843e-04
	final absorption
eps: 0.000606
	error: 7.989791e-04
	final absorption
eps: 0.000406
	error: 5.375357e-04
	final absorption
eps: 0.000272
	error: 2.854360e-04
	final absorption
eps: 0.000182
	error: 1.009788e-04
	final absorption
eps: 0.000122
	error: 2.061944e-05
	final absorption
eps: 0.000082
	error: 1.816709e-06
	final absorption
eps: 0.000055
	error: 4.590452e-08
	final absorption
eps: 0.000037
	error: 2.247000e-10
	final absorption
eps: 0.000025
	error: 1.977450e-13
	final absorption
eps: 0.000016
	error: 1.431147e-17
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 10 fertig
____________________________
10
eps: 100.000000
	error: 0.000000e+00
	final absorption
eps: 67.001875
	error: 1.864828e-17
	final absorption
eps: 44.892513
	error: 0.000000e+00
	final absorption
eps: 30.078825
	error: 0.000000e+00
	final absorption
eps: 20.153377
	error: 4.770490e-17
	final absorption
eps: 13.503140
	error: 2.298509e-17
	final absorption
eps: 9.047357
	error: 2.341877e-17
	final absorption
eps: 6.061899
	error: 0.000000e+00
	final absorption
eps: 4.061586
	error: 1.214306e-17
	final absorption
eps: 2.721339
	error: 3.469447e-18
	final absorption
eps: 1.823348
	error: 3.903128e-18
	final absorption
eps: 1.221677
	error: 1.778092e-17
	final absorption
eps: 0.818547
	error: 1.096580e-10
	final absorption
eps: 0.548442
	error: 1.639146e-06
	final absorption
eps: 0.367466
	error: 9.867364e-06
	final absorption
eps: 0.246209
	error: 4.599458e-06
	final absorption
eps: 0.164965
	error: 3.758870e-05
	final absorption
eps: 0.110530
	error: 9.484243e-05
	final absorption
eps: 0.074057
	error: 1.678897e-04
	final absorption
eps: 0.049619
	error: 3.242505e-04
	final absorption
eps: 0.033246
	error: 4.522953e-04
	final absorption
eps: 0.022275
	error: 6.066768e-04
	final absorption
eps: 0.014925
	error: 1.019227e-03
	error: 4.419371e-04
	final absorption
eps: 0.010000
	error: 1.321326e-03
	error: 6.993434e-04
	final absorption
eps: 0.006700
	error: 1.413729e-03
	error: 8.505291e-04
	final absorption
eps: 0.004489
	error: 1.259355e-03
	error: 8.131066e-04
	final absorption
eps: 0.003008
	error: 8.959410e-04
	final absorption
eps: 0.002015
	error: 6.369556e-04
	final absorption
eps: 0.001350
	error: 3.038174e-04
	final absorption
eps: 0.000905
	error: 8.942185e-05
	final absorption
eps: 0.000606
	error: 2.095533e-05
	final absorption
eps: 0.000406
	error: 3.714565e-06
	final absorption
eps: 0.000272
	error: 3.095501e-07
	final absorption
eps: 0.000182
	error: 7.462419e-09
	final absorption
eps: 0.000122
	error: 4.197853e-11
	final absorption
eps: 0.000082
	error: 5.716521e-14
	final absorption
eps: 0.000055
	error: 3.903128e-18
	final absorption
eps: 0.000037
	error: 0.000000e+00
	final absorption
eps: 0.000025
	error: 0.000000e+00
	final absorption
eps: 0.000016
	error: 0.000000e+00
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 11 fertig
____________________________
11
eps: 100.000000
	error: 1.908196e-17
	final absorption
eps: 67.001875
	error: 0.000000e+00
	final absorption
eps: 44.892513
	error: 0.000000e+00
	final absorption
eps: 30.078825
	error: 1.301043e-17
	final absorption
eps: 20.153377
	error: 0.000000e+00
	final absorption
eps: 13.503140
	error: 6.938894e-18
	final absorption
eps: 9.047357
	error: 1.604619e-17
	final absorption
eps: 6.061899
	error: 1.951564e-17
	final absorption
eps: 4.061586
	error: 0.000000e+00
	final absorption
eps: 2.721339
	error: 0.000000e+00
	final absorption
eps: 1.823348
	error: 4.640385e-17
	final absorption
eps: 1.221677
	error: 6.852158e-17
	final absorption
eps: 0.818547
	error: 8.642619e-12
	final absorption
eps: 0.548442
	error: 1.853622e-08
	final absorption
eps: 0.367466
	error: 1.902529e-06
	final absorption
eps: 0.246209
	error: 3.693519e-05
	final absorption
eps: 0.164965
	error: 6.735604e-05
	final absorption
eps: 0.110530
	error: 8.122051e-05
	final absorption
eps: 0.074057
	error: 2.312975e-04
	final absorption
eps: 0.049619
	error: 3.631378e-04
	final absorption
eps: 0.033246
	error: 4.837307e-04
	final absorption
eps: 0.022275
	error: 7.225304e-04
	final absorption
eps: 0.014925
	error: 1.001023e-03
	error: 3.957576e-04
	final absorption
eps: 0.010000
	error: 1.108239e-03
	error: 4.588781e-04
	final absorption
eps: 0.006700
	error: 1.216801e-03
	error: 5.832262e-04
	final absorption
eps: 0.004489
	error: 1.144820e-03
	error: 6.347976e-04
	final absorption
eps: 0.003008
	error: 8.517475e-04
	final absorption
eps: 0.002015
	error: 6.857033e-04
	final absorption
eps: 0.001350
	error: 4.174924e-04
	final absorption
eps: 0.000905
	error: 1.983383e-04
	final absorption
eps: 0.000606
	error: 6.186591e-05
	final absorption
eps: 0.000406
	error: 1.787925e-05
	final absorption
eps: 0.000272
	error: 5.522334e-06
	final absorption
eps: 0.000182
	error: 2.005294e-06
	final absorption
eps: 0.000122
	error: 6.565726e-07
	final absorption
eps: 0.000082
	error: 1.123316e-07
	final absorption
eps: 0.000055
	error: 6.554899e-09
	final absorption
eps: 0.000037
	error: 7.726103e-11
	final absorption
eps: 0.000025
	error: 8.391161e-14
	final absorption
eps: 0.000016
	error: 0.000000e+00
	final absorption
eps: 0.000011
	error: 0.000000e+00
	final absorption
eps: 0.000007
	error: 0.000000e+00
	final absorption
eps: 0.000005
	error: 0.000000e+00
	final absorption
eps: 0.000003
	error: 0.000000e+00
	final absorption
eps: 0.000002
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
eps: 0.000001
	error: 0.000000e+00
	final absorption
Nummer 12 fertig
____________________________
Computation time in sec:  14.295061111450195
In [28]:
## Linear Embedding

# create a Monge map from optimal couplings by averaging over the mass transport.
# Monge map contains tangent vectors which are simultaneously the linear embedded samples.

tanList=[]

for i in range(0,len(cdata)):

    print(i+1)

    ncdata = cdata[i].shape[0]
    mucdata = np.full(ncdata, 1. / ncdata)
    cost = getCostEuclidean(ref_sample, cdata[i])

    alpha = load(fileroot + 'sol_{:03d}_alpha'.format(i)+'.npy')
    beta = load(fileroot + 'sol_{:03d}_beta'.format(i)+'.npy')

    pi = np.einsum(
        np.exp((-cost + alpha.reshape((-1, 1)) + beta.reshape((1, -1))) / epsTarget), [0, 1],
        mu_ref_sample, [0], mucdata, [1], [0, 1])
    pi = scipy.sparse.csr_matrix(pi)

    T = LinW2.extractMongeData(pi, cdata[i])
    tanList.append(T - ref_sample)
1
2
3
4
5
6
7
8
9
10
11
12
In [29]:
## save linear embedded samples


tanList=np.array(tanList)
save(fileroot + 'linEmb', tanList)     

##
# ready
# continue with transport-analysis Notebook