'Returns
preferences: numpy array of shape [(item_id,preference)]
Return all existing Preferences expressed for that item,'

def preferences_for_item(self, item_id, order_by_id=True):

    item_id_loc = np.where((self._item_ids == item_id))
    if (not item_id_loc[0].size):
        raise ItemNotFoundError('Item    not    found')
    preferences = self.index[:, item_id_loc]
    data = zip(self._user_ids, preferences.flatten())
    if order_by_id:
        return [(user_id, preference) for (user_id, preference) in data if (not np.isnan(preference))]
    else:
        return sorted([(user_id, preference) for (user_id, preference) in data if (not np.isnan(preference))], key=(lambda user: (- user[1])))
