In [1]:
import numpy as np
import malis as m
import h5py
np.set_printoptions(precision=4)

In [97]:
def mknhood2d(radius=1):
    # Makes nhood structures for some most used dense graphs.

    ceilrad = np.ceil(radius)
    x = np.arange(-ceilrad,ceilrad+1,1)
    y = np.arange(-ceilrad,ceilrad+1,1)
    [i,j] = np.meshgrid(y,x)

    idxkeep = (i**2+j**2)<=radius**2
    i=i[idxkeep].ravel(); j=j[idxkeep].ravel();
    zeroIdx = np.ceil(len(i)/2).astype(int);

    # flipud and order (j,i,k) so that mknhood2(1) matches mknhood(6)
    nhood = np.vstack((j[:zeroIdx],i[:zeroIdx])).T.astype(int)
    return np.ascontiguousarray(nhood)

def mknhood3d(radius=1):
    # Makes nhood structures for some most used dense graphs.
    # The neighborhood reference for the dense graph representation we use
    # nhood(1,:) is a 3 vector that describe the node that conn(:,:,:,1) connects to
    # so to use it: conn(23,12,42,3) is the edge between node [23 12 42] and [23 12 42]+nhood(3,:)
    # See? It's simple! nhood is just the offset vector that the edge corresponds to.

    ceilrad = np.ceil(radius)
    x = np.arange(-ceilrad,ceilrad+1,1)
    y = np.arange(-ceilrad,ceilrad+1,1)
    z = np.arange(-ceilrad,ceilrad+1,1)
    [i,j,k] = np.meshgrid(z,y,z)

    idxkeep = (i**2+j**2+k**2)<=radius**2
    i=i[idxkeep].ravel(); j=j[idxkeep].ravel(); k=k[idxkeep].ravel();
    zeroIdx = np.ceil(len(i)/2).astype(int);

    # flipud and order (j,i,k) so that mknhood2(1) matches mknhood(6)
    nhood = np.vstack((j[:zeroIdx],i[:zeroIdx],k[:zeroIdx])).T.astype(int)
    return np.ascontiguousarray(nhood)

def mknhood3d_aniso(radiusxy=1,radiusxy_zminus1=1.8):
    # Makes nhood structures for some most used dense graphs.

    nhoodxyz = mknhood3d(radiusxy)
    nhoodxy_zminus1 = mknhood2d(radiusxy_zminus1)
    
    nhood = np.zeros((nhoodxyz.shape[0]+2*nhoodxy_zminus1.shape[0],3))
    print nhood.shape
    nhood[:3,:3] = nhoodxyz
    print nhood.shape
    nhood[2,3:].fill(-1)
    print nhood[:2,3:].shape
    nhood[:2,3:] = np.vstack((nhoodxy_zminus1,-nhoodxy_zminus1))

    return np.ascontiguousarray(nhood)

In [98]:
nh=mknhood3d()
print nh


[[-1  0  0]
 [ 0 -1  0]
 [ 0  0 -1]]

In [99]:
nh=mknhood3d_aniso()
print nh


(2, 0)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-99-1f9268610fbb> in <module>()
----> 1 nh=mknhood3d_aniso()
      2 print nh

<ipython-input-97-395d5e81a45c> in mknhood3d_aniso(radiusxy, radiusxy_zminus1)
     46     nhood[2,3:].fill(-1)
     47     print nhood[:2,3:].shape
---> 48     nhood[:2,3:] = np.vstack((nhoodxy_zminus1,-nhoodxy_zminus1))
     49 
     50     return np.ascontiguousarray(nhood)

ValueError: could not broadcast input array from shape (8,2) into shape (2,0)

In [ ]: