@Override public Long2IntMap splitEntities(LongSet entities, int np, Random rng) { Long2IntMap emap = new Long2IntOpenHashMap(entities.size()); logger.info("Splitting {} entities into {} partitions", entities.size(), np); long[] array = entities.toLongArray(); LongArrays.shuffle(array, rng); for (int i = 0; i < array.length; i++) { final long user = array[i]; emap.put(user, i % np); } return emap; }
@Override public Long2IntMap splitEntities(LongSet entities, int np, Random rng) { if (np * sampleSize > entities.size()) { logger.warn("cannot make {} disjoint samples of {} from {} entities, partitioning", np, sampleSize, entities.size()); return partition().splitEntities(entities, np, rng); } else { Long2IntMap emap = new Long2IntOpenHashMap(entities.size()); logger.info("Sampling {} entities into {} disjoint samples of {}", entities.size(), np, sampleSize); long[] earray = entities.toLongArray(); LongArrays.shuffle(earray, rng); for (int p = 0; p < np; p++) { for (int i = 0; i < sampleSize; i++) { long u = earray[p*sampleSize + i]; emap.put(u, p); } } return emap; } }
@Override protected Long2IntMap splitUsers(LongSet users, int np, Random rng) { Long2IntMap userMap = new Long2IntOpenHashMap(users.size()); logger.info("Splitting {} users into {} partitions", users.size(), np); long[] userArray = users.toLongArray(); LongArrays.shuffle(userArray, rng); for (int i = 0; i < userArray.length; i++) { final long user = userArray[i]; userMap.put(user, i % np); } return userMap; } }
@Override protected Long2IntMap splitUsers(LongSet users, int np, Random rng) { if (np * sampleSize > users.size()) { logger.warn("cannot make {} disjoint samples of {} from {} users, partitioning", np, sampleSize, users.size()); UserPartitionCrossfoldMethod upcm = new UserPartitionCrossfoldMethod(order, partition); return upcm.splitUsers(users, np, rng); } else { Long2IntMap userMap = new Long2IntOpenHashMap(users.size()); logger.info("Sampling {} users into {} disjoint samples of {}", users.size(), np, sampleSize); long[] userArray = users.toLongArray(); LongArrays.shuffle(userArray, rng); for (int p = 0; p < np; p++) { for (int i = 0; i < sampleSize; i++) { long u = userArray[p*sampleSize + i]; userMap.put(u, p); } } return userMap; } } }