Beispiel #1
0
  def mvm_form_prod(self,X,pselect=1.0):

    xdata=[[],[],[]]    ## row index, column index , value

    (m,n)=X.shape

    X=X.reshape((1*m,n/1))
    ## X=np.dot(X,X.T)
    # n=m
    k=0
    icount=0
    for i in range(m):
      px=np.random.rand(m)
      for j in range(m):
        if px[j]<pselect:
          v=np.dot(X[i],X[j])
          ij=np.ravel_multi_index(([i],[j]),(m,m))[0]
          tij=np.unravel_index([ij],(m*1,m/1))
          xdata[0].append(tij[0][0])
          xdata[1].append(tij[1][0])
          xdata[2].append(v)
          k+=1
        icount+=1
        
    xdata=mvm_prepare.sort_table(xdata,ifloat=1)
          
    return(xdata)
Beispiel #2
0
  def mvm_form_prod_reorder(self,X,xfactors):

    xdata=[[],[],[]]    ## row index, column index , value

    (m,n)=X.shape
    X2=np.dot(X,X.T)

    if m==400:
      print(m,n)
      
    ctensor=tensor_decomp.cls_tensor_decomp()
    ctensor.load(X2,xfactors)
    X2=ctensor.reorder_in_x(X2)
    (m2,n2)=X2.shape
    xmean=np.mean(X2)
    xstd=np.std(X2)
    lbound=xmean-5*xstd
    ubound=xmean+5*xstd
    
    k=0
    icount=0
    for i in range(m2):
      for j in range(n2):
        v=X2[i,j]
        if v>=lbound and v<=ubound:
          xdata[0].append(i)
          xdata[1].append(j)
          xdata[2].append(v)
          k+=1
        icount+=1
        
    xdata=mvm_prepare.sort_table(xdata,ifloat=1)
          
    return(xdata,m2,n2)
Beispiel #3
0
  def load(self,ifile,pselect,itrain=1):

    xdata=[[],[],[]]    ## row index, column index , value

    ddata=scipy.io.loadmat(self.sbasedir+self.ldirs[ifile]+'/'+self.slabels)
    if itrain==1:
      xtrain=ddata['xtrain']
    else:
      xtrain=ddata['xtest']
    m=xtrain.shape[0]

    ## antimatroid(xtrain[:5000])
    
    iselect=np.where(np.random.rand(m)<pselect)[0]

    xtrain0=xtrain[iselect]
    m=xtrain0.shape[0];

    X=np.dot(xtrain0,xtrain.T)

    for i in range(m):
      for j in range(m):
        v=X[i,j]
        if v!=0:
          xdata[0].append(i)
          xdata[1].append(j)
          xdata[2].append(v)
        
    xdata=mvm_prepare.sort_table(xdata,ifloat=1)
          
    return(xdata,m,m)
Beispiel #4
0
    def load_objobj_act(self, lfiles, ifeature):
        """
    load collected known entities (object, action,feature)
    into the relation table.
    """

        ## first phase collect object labels
        for ifile in lfiles:
            self.collect_entities(ifile, ifeature)

        ## second phase load the relation table of known examples
        xdata = [[], [], []]  ## row index, column index , value
        idata = 0
        ifixtrain = []
        ifixtest = []

        for iobject1 in range(self.nobject):
            for iaction in self.ddata[iobject1].keys():
                for iobject2 in range(self.nobject):
                    if iaction in self.ddata[iobject2]:
                        lvalue1 = self.ddata[iobject1][iaction]
                        lvalue2 = self.ddata[iobject2][iaction]
                        if len(lvalue1) > 0 and len(lvalue2) > 0:
                            vvalue=np.hstack((np.array(list(lvalue1)), \
                                              np.array(list(lvalue2))))
                            ## if len(vvalue)>1:
                            ##   print(vvalue)
                            vvalue = np.mean(vvalue.astype(np.double))
                            if self.irowcol == 0:
                                xdata[0].append(iobject1 * self.nobject +
                                                iobject2)
                                xdata[1].append(iaction)
                                xdata[2].append(vvalue)
                            elif self.irowcol == 1:
                                xdata[0].append(iaction)
                                xdata[1].append(iobject1 * self.nobject +
                                                iobject2)
                                xdata[2].append(vvalue)
                            ifixtrain.append(idata)
                            idata += 1

        if self.irowcol == 0:
            self.nrow = self.nobject**2
            self.ncol = self.naction
        elif self.irowcol == 1:
            self.nrow = self.naction
            self.ncol = self.nobject**2

        xdata = mvm_prepare.sort_table(xdata, ifloat=1)

        ifixtrain = np.array(ifixtrain)
        ifixtest = ifixtrain

        return (xdata, self.nrow, self.ncol, ifixtrain, ifixtest)
Beispiel #5
0
  def load_objobj_act(self,lfiles,ifeature):
    """
    load collected known entities (object, action,feature)
    into the relation table.
    """

    ## first phase collect object labels
    for ifile in lfiles:
      self.collect_entities(ifile,ifeature)
    
    ## second phase load the relation table of known examples
    xdata=[[],[],[]]    ## row index, column index , value
    idata=0
    ifixtrain=[]
    ifixtest=[]

    for iobject1 in range(self.nobject):
      for iaction in self.ddata[iobject1].keys():
        for iobject2 in range(self.nobject):
          if iaction in self.ddata[iobject2]:
            lvalue1=self.ddata[iobject1][iaction]
            lvalue2=self.ddata[iobject2][iaction]
            if len(lvalue1)>0 and len(lvalue2)>0:
              vvalue=np.hstack((np.array(list(lvalue1)), \
                                np.array(list(lvalue2))))
              ## if len(vvalue)>1:
              ##   print(vvalue)
              vvalue=np.mean(vvalue.astype(np.double))
              if self.irowcol==0: 
                xdata[0].append(iobject1*self.nobject+iobject2)
                xdata[1].append(iaction)
                xdata[2].append(vvalue)
              elif self.irowcol==1:
                xdata[0].append(iaction)
                xdata[1].append(iobject1*self.nobject+iobject2)
                xdata[2].append(vvalue)
              ifixtrain.append(idata)
              idata+=1
        
    if self.irowcol==0:
      self.nrow=self.nobject**2
      self.ncol=self.naction
    elif self.irowcol==1:
      self.nrow=self.naction
      self.ncol=self.nobject**2

    xdata=mvm_prepare.sort_table(xdata,ifloat=1)

    ifixtrain=np.array(ifixtrain)
    ifixtest=ifixtrain
    
    return(xdata,self.nrow,self.ncol,ifixtrain,ifixtest)
Beispiel #6
0
    def load_onefile(self, iknown, ifile):
        """
    - load collected known entities (object, action,feature)
    into the relation table.
     - one file is loaded and cut into training and test
    - it is to find the best parameters for the general case
    """

        ## first phase collect object labels
        if iknown == 0:
            sfile = self.listfull[ifile]
        else:
            sfile = self.listknown[ifile]

        self.collect_objects(sfile)
        self.collect_relations(sfile, self.ddata_tra)

        print('<<<' + sfile)
        ## second phase load the relation table of known examples
        xdata = [[], [], []]  ## row index, column index , value

        for iobject1, dobject2 in self.ddata_tra.items():
            for iobject2, dvalues in dobject2.items():
                for ifeature in range(self.nfeature):
                    if ifeature in dvalues:
                        svalue = dvalues[ifeature]
                    else:
                        svalue = ''
                    if len(
                            svalue
                    ) > 0:  ## if value is not given it is assumed as missing
                        if self.irowcol == 0:
                            xdata[0].append(iobject1)
                            xdata[1].append(ifeature * self.nobject + iobject2)
                            xdata[2].append(float(svalue))
                        elif self.irowcol == 1:
                            xdata[0].append(ifeature * self.nobject + iobject1)
                            xdata[1].append(iobject2)
                            xdata[2].append(float(svalue))

        if self.irowcol == 0:
            self.nrow = self.nobject
            self.ncol = self.nobject * self.nfeature
        elif self.irowcol == 1:
            self.nrow = self.nobject * self.nfeature
            self.ncol = self.nobject

        xdata = mvm_prepare.sort_table(xdata, ifloat=1)

        return (xdata, self.nrow, self.ncol)
Beispiel #7
0
  def load_onefile(self,iknown,ifile):
    """
    - load collected known entities (object, action,feature)
    into the relation table.
     - one file is loaded and cut into training and test
    - it is to find the best parameters for the general case
    """

    ## first phase collect object labels
    if iknown==0:
      sfile=self.listfull[ifile]
    else:
      sfile=self.listknown[ifile]
      
    self.collect_objects(sfile)
    self.collect_relations(sfile,self.ddata_tra)

    print('<<<'+sfile)
    ## second phase load the relation table of known examples
    xdata=[[],[],[]]    ## row index, column index , value

    for iobject1,dobject2 in self.ddata_tra.items():
      for iobject2,dvalues in dobject2.items():
        for ifeature in range(self.nfeature):
          if ifeature in dvalues:
            svalue=dvalues[ifeature]
          else:
            svalue=''
          if len(svalue)>0:   ## if value is not given it is assumed as missing
            if self.irowcol==0: 
              xdata[0].append(iobject1)
              xdata[1].append(ifeature*self.nobject+iobject2)
              xdata[2].append(float(svalue))
            elif self.irowcol==1:
              xdata[0].append(ifeature*self.nobject+iobject1)
              xdata[1].append(iobject2)
              xdata[2].append(float(svalue))
        
    if self.irowcol==0:
      self.nrow=self.nobject
      self.ncol=self.nobject*self.nfeature
    elif self.irowcol==1:
      self.nrow=self.nobject*self.nfeature
      self.ncol=self.nobject

    xdata=mvm_prepare.sort_table(xdata,ifloat=1)

    return(xdata,self.nrow,self.ncol)
Beispiel #8
0
  def mvm_form(self,pselect=1.0):

    xdata=[[],[],[]]    ## row index, column index , value

    (m,n)=self.X.shape

    k=0
    for i in range(m):
      px=np.random.rand(n)
      for j in range(n):
        if px[j]<pselect:
          xdata[0].append(i)
          xdata[1].append(j)
          xdata[2].append(self.X[i,j])
          k+=1
          
    xdata=mvm_prepare.sort_table(xdata,ifloat=1)

    return(xdata)
Beispiel #9
0
  def load(self,ifile):  

    if ifile==0:
      sdir='/home/szedmak/data/image_text/labeled_images/'
      sfile='/cambridge/Image007.png'
      xmatpil=pilimg.open(sdir+sfile)
      xmatrix=np.array(xmatpil.resize((768,512)))  ## 504,756 -> 512,768
      self.xfactors=np.array([[32,48,1],[16,16,1],[1,1,3]]) 
    elif ifile==1:
      sdir='/home/szedmak/src/python/algebra/tensor_decomp/'
      sfile='handwritten.png'
      xmatpil=pilimg.open(sdir+sfile)
      xmatrix=np.array(xmatpil.resize((1024,1024)))  ## 504,756 -> 512,768
      self.xfactors=np.array([[32,32],[32,32]])
    elif ifile==2:
      sdir='/home/szedmak/src/python/algebra/tensor_decomp/'
      sfile='tilling.png'
      xmatpil=pilimg.open(sdir+sfile)
      xmatrix=np.array(xmatpil.resize((576,512)))  ## 504,756 -> 512,768
      ## xmatrix=np.mean(xmatrix,axis=2)
      self.xfactors=np.array([[32,36,1],[16,16,1],[1,1,3]])  ## tilling
    elif ifile==3:
      sdir='/home/szedmak/src/python/algebra/tensor_decomp/'
      sfile='poligon.png'
      xmatpil=pilimg.open(sdir+sfile)
      xmatrix=np.array(xmatpil.resize((512,512)))  ## 504,756 -> 512,768
      self.xfactors=np.array([[32,32,1],[16,16,1],[1,1,3]])  ## poligon
    elif ifile==4:
      sdir='/home/szedmak/src/python/algebra/tensor_decomp/'
      sfile='2008toyroom.png'
      xmatpil=pilimg.open(sdir+sfile)
      xmatrix=np.array(xmatpil.resize((768,512)))  ## 504,756 -> 512,768
      ## xmatrix=np.mean(xmatrix,axis=2)
      self.xfactors=np.array([[32,48,1],[16,16,1],[1,1,3]]) 
    elif ifile==5:
      sdir='/home/szedmak/src/python/algebra/tensor_decomp/'
      sfile='PLayroom_How_to_Organize_Kids_Room_2013.png'
      xmatpil=pilimg.open(sdir+sfile)
      xmatrix=np.array(xmatpil.resize((768,512)))  ## 504,756 -> 512,768
      self.xfactors=np.array([[32,48,1],[16,16,1],[1,1,3]]) 

    print(sdir,sfile)
    print(self.xfactors)

    self.baseline(xmatrix)

    ctensor=tensor_decomp.cls_tensor_decomp()
    ctensor.load(xmatrix,self.xfactors)
    X=ctensor.reorder_in_x(xmatrix)
    ## X=X.T
    tshape=X.shape
    mi=tshape[0]
    mj=tshape[1]
    ## if len(tshape)>2:
    ##   mk=tshape[2]

    ## X=X/self.image_scale
    
    xdata=[[],[],[]]    ## row index, column index , value
    for i in range(mi):
      for j in range(mj):
        xdata[0].append(i)
        xdata[1].append(int(np.mean(X[i,j])))
        xdata[2].append(X[i,j]/self.image_scale)
        
    xdata=mvm_prepare.sort_table(xdata,ifloat=1)

    m1=mi
    ## m2=mj
    m2=256
          
    return(xdata,m1,m2)
Beispiel #10
0
  def load_twofiles(self,iknown1,iknown2,ifile1,ifile2):
    """
    load collected known entities (object, action,feature)
    + the unknown object, action pairs without value into the relation table.

    !!! here we assume that all files contains the same set of object pairs.
    !!! it can be changed later!!!
    iknown1,ifile1   give the training
    iknown2,ifile2   give the test
    """

    ## first phase collect object labels
    if iknown1==0:
      sfile1=self.listfull[ifile1]
    else:
      sfile1=self.listknown[ifile1]
    if iknown2==0:
      sfile2=self.listfull[ifile2]
    else:
      sfile2=self.listknown[ifile2]
   
    self.collect_objects(sfile1)
    self.collect_relations(sfile1,self.ddata_tra)
    self.collect_relations(sfile2,self.ddata_tes)
    
    ## second phase load the relation table of known examples
    xdata=[[],[],[]]    ## row index, column index , value

    ## ndata=self.nobject**2
    idata=0
    ifixtrain=[]
    ifixtest=[]
    for iobject1,dobject2 in self.ddata_tra.items():
      for iobject2,dvalues in dobject2.items():
        for ifeature,svalue in dvalues.items():
          if len(svalue)>0:
            if self.irowcol==0: 
              xdata[0].append(iobject1)
              ## xdata[1].append(ifeature*self.nobject+iobject2)
              xdata[1].append(ifeature+self.nfeature*iobject2)
              xdata[2].append(float(svalue))
            elif self.irowcol==1:
              ## xdata[0].append(ifeature*self.nobject+iobject1)
              xdata[0].append(ifeature+self.nfeature*iobject1)
              xdata[1].append(iobject2)
              xdata[2].append(float(svalue))
            ifixtrain.append(idata)
            idata+=1
          else:
            svalue=self.ddata_tes[iobject1][iobject2][ifeature]
            if len(svalue)>0:
              fvalue=float(svalue)
            else:
              fvalue=0
            if self.irowcol==0: 
              xdata[0].append(iobject1)
              ## xdata[1].append(ifeature*self.nobject+iobject2)
              xdata[1].append(ifeature+self.nfeature*iobject2)
              xdata[2].append(fvalue)
            elif self.irowcol==1:
              ## xdata[0].append(ifeature*self.nobject+iobject1)
              xdata[0].append(ifeature+self.nfeature*iobject1)
              xdata[1].append(iobject2)
              xdata[2].append(fvalue)
            ifixtest.append(idata)
            idata+=1

    if self.irowcol==0:
      self.nrow=self.nobject
      self.ncol=self.nobject*self.nfeature
    elif self.irowcol==1:
      self.nrow=self.nobject*self.nfeature
      self.ncol=self.nobject

    xdata=mvm_prepare.sort_table(xdata,ifloat=1)

    ifixtrain=np.array(ifixtrain)
    ifixtest=np.array(ifixtest)

    return(xdata,self.nrow,self.ncol,ifixtrain,ifixtest)
Beispiel #11
0
    def create_diag_kernel(self,
                           xdatacls,
                           params_spec,
                           norm_spec,
                           itraintest=1):

        xdata_1 = xdatacls.xdata_tra
        nval = xdata_1[2].shape[1]
        xranges_1 = xdatacls.xranges_rel
        if itraintest != 1:
            xdata_2 = xdatacls.xdata_tes
            xranges_2 = xdatacls.xranges_rel_test
        else:
            xdata_2 = xdata_1
            xranges_2 = xranges_1

        nrow = xdatacls.nrow
        ncol = xdatacls.ncol

        ## create column, row order
        xdata_1_inv = [xdata_1[1], xdata_1[0]]
        xdata_1_inv = mvm_prepare.sort_table(xdata_1_inv, idata=0)
        xranges_1_inv = mvm_prepare.mvm_ranges(xdata_1_inv, ncol, None)
        if itraintest != 1:
            xdata_2_inv = [xdata_2[1], xdata_2[0]]
            xdata_2_inv = mvm_prepare.sort_table(xdata_2_inv, idata=0)
            xranges_2_inv = mvm_prepare.mvm_ranges(xdata_2_inv, ncol, None)
        else:
            xdata_2_inv = xdata_1_inv
            xranges_2_inv = xranges_1_inv

        cxdata = cls_dataitem()
        npart = 3
        cxdata.xdata_tra = [None] * npart
        cxdata.xdata_tes = [None] * npart

        for ilearner in range(nrow):
            (istart, nlength) = xranges_1[ilearner]
            nlength_1 = 0
            for icol in range(nlength):
                inboro = xdata_1[1][istart + icol]
                nlength_1 += xranges_1_inv[inboro][1]
            cxdata.xdata_tra=[np.zeros(nlength_1,dtype=int), \
                              np.zeros(nlength_1,dtype=int), \
                              np.zeros((nlength_1,nval))]
            if itraintest != 1:
                (istart, nlength) = xranges_2[ilearner]
                nlength_2 = 0
                for icol in range(nlength):
                    inboro = xdata_2[1][istart + icol]
                    nlength_2 += xranges_2_inv[inboro][1]
                cxdata.xdata_tes=[np.zeros(nlength_1,dtype=int), \
                                  np.zeros(nlength_1,dtype=int), \
                                  np.zeros((nlength_1,nval))]
            else:
                nlength_2 = nlength_1

        for ilearner in range(nrow):
            (istart, nlength_tra) = xranges_1[ilearner]
            for icol in range(nlength_tra):
                inboro = xdata_1[1][istart + icol]
                (istartr, nlengthr) = xranges_1_inv[inboro]
                xilearners = xdata_1_inv[istartr, istartr:nlengthr]
                ipos = 0
                for ilearnerc in xilearners:
                    (istartc, nlengthc) = xranges_1[ilearnerc]
                    for ipart in range(npart):
                        cxdata.xdata_tra[ipart][ipos:ipos+nlengthc] \
                              =xdata_1[ipart][istartc,istartc+nlengthc]
                        ipos += nlengthc
            if itraintest != 1:
                (istart, nlength_tes) = xranges_2[ilearner]
                for icol in range(nlength_tes):
                    inboro = xdata_2[1][istart + icol]
                    (istartr, nlengthr) = xranges_2_inv[inboro]
                    xilearners = xdata_2_inv[istartr, istartr:nlengthr]
                    ipos = 0
                    for ilearnerc in xilearners:
                        (istartc, nlengthc) = xranges_2[ilearnerc]
                        for ipart in range(npart):
                            cxdata.xdata_tes[ipart][ipos:ipos+nlengthc] \
                                  =xdata_2[ipart][istartc,istartc+nlengthc]
                            ipos += nlengthc

            cxdata.nrow = nrow

            if itraintest == 1:
                cxdata.nncol = nlength_tra
                self.dkernel[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \
                                             params_spec,norm_spec)
            else:
                cxdata.nncol = nlength_tes
                self.dkernel_test[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \
                                             params_spec,norm_spec)

        return
Beispiel #12
0
  def create_diag_kernel(self,xdatacls,params_spec,norm_spec,itraintest=1):
    
    xdata_1=xdatacls.xdata_tra
    nval=xdata_1[2].shape[1]
    xranges_1=xdatacls.xranges_rel
    if itraintest!=1:
      xdata_2=xdatacls.xdata_tes
      xranges_2=xdatacls.xranges_rel_test
    else:
      xdata_2=xdata_1
      xranges_2=xranges_1
      
    nrow=xdatacls.nrow
    ncol=xdatacls.ncol

    ## create column, row order 
    xdata_1_inv=[xdata_1[1],xdata_1[0]]
    xdata_1_inv=mvm_prepare.sort_table(xdata_1_inv,idata=0)
    xranges_1_inv=mvm_prepare.mvm_ranges(xdata_1_inv,ncol,None)
    if itraintest!=1:
      xdata_2_inv=[xdata_2[1],xdata_2[0]]
      xdata_2_inv=mvm_prepare.sort_table(xdata_2_inv,idata=0)
      xranges_2_inv=mvm_prepare.mvm_ranges(xdata_2_inv,ncol,None)
    else:
      xdata_2_inv=xdata_1_inv
      xranges_2_inv=xranges_1_inv
      
    cxdata=cls_dataitem()
    npart=3
    cxdata.xdata_tra=[None]*npart 
    cxdata.xdata_tes=[None]*npart 

    for ilearner in range(nrow):
      (istart,nlength)=xranges_1[ilearner]
      nlength_1=0
      for icol in range(nlength):
        inboro=xdata_1[1][istart+icol]
        nlength_1+=xranges_1_inv[inboro][1]
      cxdata.xdata_tra=[np.zeros(nlength_1,dtype=int), \
                        np.zeros(nlength_1,dtype=int), \
                        np.zeros((nlength_1,nval))]
      if itraintest!=1:
        (istart,nlength)=xranges_2[ilearner]
        nlength_2=0
        for icol in range(nlength):
          inboro=xdata_2[1][istart+icol]
          nlength_2+=xranges_2_inv[inboro][1]
        cxdata.xdata_tes=[np.zeros(nlength_1,dtype=int), \
                          np.zeros(nlength_1,dtype=int), \
                          np.zeros((nlength_1,nval))]
      else:
        nlength_2=nlength_1


    
    for ilearner in range(nrow):
      (istart,nlength_tra)=xranges_1[ilearner]
      for icol in range(nlength_tra):
        inboro=xdata_1[1][istart+icol]
        (istartr,nlengthr)=xranges_1_inv[inboro]
        xilearners=xdata_1_inv[istartr,istartr:nlengthr]
        ipos=0
        for ilearnerc in xilearners:
          (istartc,nlengthc)=xranges_1[ilearnerc]
          for ipart in range(npart):
            cxdata.xdata_tra[ipart][ipos:ipos+nlengthc] \
                  =xdata_1[ipart][istartc,istartc+nlengthc]
            ipos+=nlengthc
      if itraintest!=1:
        (istart,nlength_tes)=xranges_2[ilearner]
        for icol in range(nlength_tes):
          inboro=xdata_2[1][istart+icol]
          (istartr,nlengthr)=xranges_2_inv[inboro]
          xilearners=xdata_2_inv[istartr,istartr:nlengthr]
          ipos=0
          for ilearnerc in xilearners:
            (istartc,nlengthc)=xranges_2[ilearnerc]
            for ipart in range(npart):
              cxdata.xdata_tes[ipart][ipos:ipos+nlengthc] \
                    =xdata_2[ipart][istartc,istartc+nlengthc]
              ipos+=nlengthc
        
      cxdata.nrow=nrow

      if itraintest==1:
        cxdata.nncol=nlength_tra
        self.dkernel[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \
                                     params_spec,norm_spec)
      else:
        cxdata.nncol=nlength_tes
        self.dkernel_test[ilearner]=mvm_kernel_eval.mvm_kernel_sparse(cxdata,itraintest, \
                                     params_spec,norm_spec)
        

    return
Beispiel #13
0
    def load_twofiles(self, iknown1, iknown2, ifile1, ifile2):
        """
    load collected known entities (object, action,feature)
    + the unknown object, action pairs without value into the relation table.

    !!! here we assume that all files contains the same set of object pairs.
    !!! it can be changed later!!!
    iknown1,ifile1   give the training
    iknown2,ifile2   give the test
    """

        ## first phase collect object labels
        if iknown1 == 0:
            sfile1 = self.listfull[ifile1]
        else:
            sfile1 = self.listknown[ifile1]
        if iknown2 == 0:
            sfile2 = self.listfull[ifile2]
        else:
            sfile2 = self.listknown[ifile2]

        self.collect_objects(sfile1)
        self.collect_relations(sfile1, self.ddata_tra)
        self.collect_relations(sfile2, self.ddata_tes)

        ## second phase load the relation table of known examples
        xdata = [[], [], []]  ## row index, column index , value

        ## ndata=self.nobject**2
        idata = 0
        ifixtrain = []
        ifixtest = []
        for iobject1, dobject2 in self.ddata_tra.items():
            for iobject2, dvalues in dobject2.items():
                for ifeature, svalue in dvalues.items():
                    if len(svalue) > 0:
                        if self.irowcol == 0:
                            xdata[0].append(iobject1)
                            ## xdata[1].append(ifeature*self.nobject+iobject2)
                            xdata[1].append(ifeature +
                                            self.nfeature * iobject2)
                            xdata[2].append(float(svalue))
                        elif self.irowcol == 1:
                            ## xdata[0].append(ifeature*self.nobject+iobject1)
                            xdata[0].append(ifeature +
                                            self.nfeature * iobject1)
                            xdata[1].append(iobject2)
                            xdata[2].append(float(svalue))
                        ifixtrain.append(idata)
                        idata += 1
                    else:
                        svalue = self.ddata_tes[iobject1][iobject2][ifeature]
                        if len(svalue) > 0:
                            fvalue = float(svalue)
                        else:
                            fvalue = 0
                        if self.irowcol == 0:
                            xdata[0].append(iobject1)
                            ## xdata[1].append(ifeature*self.nobject+iobject2)
                            xdata[1].append(ifeature +
                                            self.nfeature * iobject2)
                            xdata[2].append(fvalue)
                        elif self.irowcol == 1:
                            ## xdata[0].append(ifeature*self.nobject+iobject1)
                            xdata[0].append(ifeature +
                                            self.nfeature * iobject1)
                            xdata[1].append(iobject2)
                            xdata[2].append(fvalue)
                        ifixtest.append(idata)
                        idata += 1

        if self.irowcol == 0:
            self.nrow = self.nobject
            self.ncol = self.nobject * self.nfeature
        elif self.irowcol == 1:
            self.nrow = self.nobject * self.nfeature
            self.ncol = self.nobject

        xdata = mvm_prepare.sort_table(xdata, ifloat=1)

        ifixtrain = np.array(ifixtrain)
        ifixtest = np.array(ifixtest)

        return (xdata, self.nrow, self.ncol, ifixtrain, ifixtest)