/** * 构造并初始化网格 * * @param carrier 样本实例 * @return 推理网格 */ protected Node[][] initialLattice(Instance carrier) { int[][] data = (int[][]) carrier.getData(); int length = carrier.length(); Node[][] lattice = new Node[length][]; for (int l = 0; l < length; l++) { lattice[l] = new Node[ysize]; for (int c = 0; c < ysize; c++) { lattice[l][c] = new Node(ysize); for (int i = 0; i < orders.length; i++) { if (data[l][i] == -1 || data[l][i] >= weights.length) // TODO: xpqiu 2013.2.1 continue; if (orders[i] == 0) { lattice[l][c].score += weights[data[l][i] + c]; } else if (orders[i] == 1) { int offset = c; for (int p = 0; p < ysize; p++) { // weights对应trans(c,p)的按行展开 lattice[l][c].trans[p] += weights[data[l][i] + offset]; offset += ysize; } } } } } return lattice; }