private void genMj(int itemId) {
		
		int itemRatedNumber = DataInfo.itemlist[itemId].length;   //项目被评过分的个数
		
		if (itemRatedNumber == 0) {
			
			for (int j = 0; j != DataInfo.featureNumber; j++) {
				DataInfo.itemFeature[itemId][j] = 0;
			}
			return;
		}
		
		int[] columnIndexes = new int[itemRatedNumber];
		double[] rate = new double[itemRatedNumber];
		
		for(int j = 0; j < DataInfo.itemlist[itemId].length; j++) {
			int a = DataInfo.itemlist[itemId][j];
			columnIndexes[j] = a / 10;
			rate[j] = a % 10;
		}
		
		Rj = DataInfo.factory1D.make(itemRatedNumber);
		subUserFeature = DataInfo.factory2D.make(DataInfo.featureNumber, itemRatedNumber);
		
		Rj.assign(rate);
		initSubUserFeature(columnIndexes, itemRatedNumber);

		Algebra algebra = new Algebra(0);
		Algebra algebra2 = new Algebra(0);
		
		
		E = DataInfo.factory2D.identity(DataInfo.featureNumber);
		
		DoubleMatrix1D Mj;
		Mj = DataInfo.factory1D.make(DataInfo.featureNumber, 0);
		
		Mj = algebra.mult(
				// inverse of Ai
						algebra2.inverse(subUserFeature.zMult(subUserFeature.viewDice(), E,
								1, DataInfo.lambda * itemRatedNumber, false,false)),
				// Vi
						algebra.mult(subUserFeature, Rj));
		
		for (int k = 0; k < DataInfo.featureNumber; k++) {
			DataInfo.itemFeature[itemId][k] = Mj.getQuick(k);
		}
	}