private void genUi(int userId) {
		
		int userRatedNumber = DataInfo.userlist[userId].length;   //用户评过分的项目个数
		
		if (userRatedNumber == 0) {
			
			for (int j = 0; j != DataInfo.featureNumber; j++) {
				DataInfo.userFeature[userId][j] = 0;
			}
			return;
		}
		
		int[] columnIndexes = new int[userRatedNumber];
		double[] rate = new double[userRatedNumber];
		
		for(int j = 0; j < DataInfo.userlist[userId].length; j++) {
			int a = DataInfo.userlist[userId][j];
			columnIndexes[j] = a / 10;
			rate[j] = a % 10;
		}
				
		
		Ri = DataInfo.factory1D.make(userRatedNumber);
		subItemFeature = DataInfo.factory2D.make(DataInfo.featureNumber, userRatedNumber);
		
		Ri.assign(rate);
		initSubItemFeature(columnIndexes, userRatedNumber);


		Algebra algebra = new Algebra(0);
		Algebra algebra2 = new Algebra(0);
		
		E = DataInfo.factory2D.identity(DataInfo.featureNumber);
		
		DoubleMatrix1D Ui;
		Ui = DataInfo.factory1D.make(DataInfo.featureNumber, 0);
		
		Ui = algebra.mult(
				// inverse of Ai
				algebra2.inverse(subItemFeature.zMult(subItemFeature.viewDice(), E,
						1, DataInfo.lambda * userRatedNumber, false,false)),
				// Vi
				algebra.mult(subItemFeature, Ri));
		
		for (int k = 0; k < DataInfo.featureNumber; k++) {
			DataInfo.userFeature[userId][k] = Ui.getQuick(k);
		}
	}