Exercise 2.105

Exercise 2.105#

x

import numpy as np

inf = float("inf")
M1 = np.array([[0, inf, 3, inf], [2, 0 , inf, 5], [inf, 3, 0 , inf], [inf, inf, 6, 0]])

# See https://stackoverflow.com/a/55986817/622049
M2 = np.min(M1[:,:,None] + M1[None,:,:], axis=1)
M3 = np.min(M2[:,:,None] + M1[None,:,:], axis=1)
M4 = np.min(M2[:,:,None] + M2[None,:,:], axis=1)

M1, M2, M3, M4
(array([[ 0., inf,  3., inf],
        [ 2.,  0., inf,  5.],
        [inf,  3.,  0., inf],
        [inf, inf,  6.,  0.]]),
 array([[ 0.,  6.,  3., inf],
        [ 2.,  0.,  5.,  5.],
        [ 5.,  3.,  0.,  8.],
        [inf,  9.,  6.,  0.]]),
 array([[ 0.,  6.,  3., 11.],
        [ 2.,  0.,  5.,  5.],
        [ 5.,  3.,  0.,  8.],
        [11.,  9.,  6.,  0.]]),
 array([[ 0.,  6.,  3., 11.],
        [ 2.,  0.,  5.,  5.],
        [ 5.,  3.,  0.,  8.],
        [11.,  9.,  6.,  0.]]))