You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2010/11/07 10:37:39 UTC
svn commit: r1032241 - in /mahout/trunk/core/src:
main/java/org/apache/mahout/cf/taste/impl/model/
test/java/org/apache/mahout/cf/taste/impl/recommender/
Author: srowen
Date: Sun Nov 7 09:37:39 2010
New Revision: 1032241
URL: http://svn.apache.org/viewvc?rev=1032241&view=rev
Log:
Small fix to test and toString(); add helpful check for bad use of item/user pref array
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java?rev=1032241&r1=1032240&r2=1032241&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java Sun Nov 7 09:37:39 2010
@@ -54,14 +54,20 @@ public final class GenericItemPreference
public GenericItemPreferenceArray(List<Preference> prefs) {
this(prefs.size());
int size = prefs.size();
+ long itemID = Long.MIN_VALUE;
for (int i = 0; i < size; i++) {
Preference pref = prefs.get(i);
ids[i] = pref.getUserID();
+ if (i == 0) {
+ itemID = pref.getItemID();
+ } else {
+ if (itemID != pref.getItemID()) {
+ throw new IllegalArgumentException("Not all item IDs are the same");
+ }
+ }
values[i] = pref.getValue();
}
- if (size > 0) {
- id = prefs.get(0).getItemID();
- }
+ id = itemID;
}
/**
@@ -240,6 +246,9 @@ public final class GenericItemPreference
@Override
public String toString() {
+ if (ids == null || ids.length == 0) {
+ return "GenericItemPreferenceArray[{}]";
+ }
StringBuilder result = new StringBuilder(20 * ids.length);
result.append("GenericItemPreferenceArray[itemID:");
result.append(id);
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java?rev=1032241&r1=1032240&r2=1032241&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java Sun Nov 7 09:37:39 2010
@@ -27,6 +27,11 @@ import org.apache.mahout.cf.taste.model.
/**
* <p>
+ * Like {@link GenericItemPreferenceArray} but stores preferences for one user (all user IDs the same) rather
+ * than one item.
+ * </p>
+ *
+ * <p>
* This implementation maintains two parallel arrays, of user IDs and values. The idea is to save allocating
* {@link Preference} objects themselves. This saves the overhead of {@link Preference} objects but also
* duplicating the user ID value.
@@ -55,14 +60,20 @@ public final class GenericUserPreference
public GenericUserPreferenceArray(List<Preference> prefs) {
this(prefs.size());
int size = prefs.size();
+ long userID = Long.MIN_VALUE;
for (int i = 0; i < size; i++) {
Preference pref = prefs.get(i);
+ if (i == 0) {
+ userID = pref.getUserID();
+ } else {
+ if (userID != pref.getUserID()) {
+ throw new IllegalArgumentException("Not all user IDs are the same");
+ }
+ }
ids[i] = pref.getItemID();
values[i] = pref.getValue();
}
- if (size > 0) {
- id = prefs.get(0).getUserID();
- }
+ id = userID;
}
/**
@@ -241,6 +252,9 @@ public final class GenericUserPreference
@Override
public String toString() {
+ if (ids == null || ids.length == 0) {
+ return "GenericUserPreferenceArray[{}]";
+ }
StringBuilder result = new StringBuilder(20 * ids.length);
result.append("GenericUserPreferenceArray[userID:");
result.append(id);
Modified: mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java?rev=1032241&r1=1032240&r2=1032241&view=diff
==============================================================================
--- mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java (original)
+++ mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java Sun Nov 7 09:37:39 2010
@@ -48,8 +48,8 @@ public final class SamplingCandidateItem
prefsOfUser456.add(new GenericPreference(456L, 2L, 1.0f));
List<Preference> prefsOfUser789 = new ArrayList<Preference>();
- prefsOfUser456.add(new GenericPreference(789L, 1L, 0.5f));
- prefsOfUser456.add(new GenericPreference(789L, 3L, 1.0f));
+ prefsOfUser789.add(new GenericPreference(789L, 1L, 0.5f));
+ prefsOfUser789.add(new GenericPreference(789L, 3L, 1.0f));
FastByIDMap<PreferenceArray> userData = new FastByIDMap<PreferenceArray>();
userData.put(123L, new GenericUserPreferenceArray(prefsOfUser123));