in this def i get TypeError: unhashable type: 'numpy.ndarray' in line retrieved_indices_set = set(retrieved_indices)
def evaluate_retrieval(query_idx, retrieved_indices, relevant_indices):
# Convert each list element to a tuple
# Flatten the two-layer list and convert elements to tuples
arr = np.array(retrieved_indices) #retrieved_indices => 128 * 128 * 3
# Transpose the array and convert it to a list of tuples
retrieved_indices = tuple(list(map(tuple, np.vstack(arr.T))))
print(type(retrieved_indices))
# Create a set from the tuples
retrieved_indices_set = set(retrieved_indices)
relevant_retrieved = len(retrieved_indices_set.intersection(relevant_indices_set))
precision = relevant_retrieved / len(retrieved_indices_set) if len(retrieved_indices_set) > 0 else 0
return precision
I try this but didn't work
retrieved_indices_tuples = tuple(tuple(tuple(pixel) for pixel in row) for row in retrieved_indices)
I solved this problem in this way:
retrieved_indices_tuples = tuple(
tuple(
tuple(
tuple(pixel) for pixel in slice
) for slice in row
) for row in retrieved_indices
)
print(type(retrieved_indices_tuples)) # Should print <class 'tuple'>
print(type(retrieved_indices_tuples[0])) # Should print <class 'tuple'>
print(type(retrieved_indices_tuples[0][0])) # Should print <class 'tuple'>
print(type(retrieved_indices_tuples[0][0][0])) # Should print <class 'tuple'>
print(type(retrieved_indices_tuples[0][0][0][0])) # Should print <class 'int'>