Dear Mentors:

In Exercise 09 of the assignment for Week 4, I got stuck in creating a hash table.

I understand the algorithm where a 1 is assigned if the sign of the dot product

of a given vector with 10 hyperplanes is positive, otherwise a 0 is assigned.

The list for storing these hash values is of dimension (1, 10), isn’t it?

The code below is my problematic part.

< My code >

h = 1 if sign_of_dot_product >= 0 else 0

< My error >

ValueError: The truth value of an array with more than one element is ambiguous.

Use a.any() or a.all()

This error seems to derive from the inappropriate indexing for the list.

But I can’t find any solution due to the lack of my grammatical knowledge of Python.

Could you please give me some advice?

Regards,

Setsuro

Sorry, I found a solution by myself!

I was able to extract a 10-dimensional vector from the list, sign_of_dot_product.

Then, I checkd if each element of the vector is positive or negative.

After that, I stored the binary value into a list again by using the append() method.

Thanks.

If possible, I want to know a more efficeint way to solve my error above.

In fact, I used an empty list and a for-loop to store the corresponding hash values,

so I didn’t have to use the squeeze() function to remove an unused dimension.

There seems to be a better solution based on the element-wise computation.

I would appreciate it if you could give me extra information.

Regards,

Setsuro

Hello

You can simply assign an array comparison to h, as follows

h = sign_of_dot_product >= 0

h will be an array of boolean values (True/False) that are considered as 1/0 in calculation

3 Likes

**That’s it!**

Thank you so much, zakaria_hmamed.

Your response is what I really want.

The code you posted is effective for numpy arrays, not for ordinary Python lists, right?

Your advice on “boolean comparison” is quite informative to me.

Thank you again! I really appreciate your quick response.

Sincerely,

Setsuro

You are welcome Setsuro

Yes it does not work for lists the same way. However you can iterate in a list and make an element-wise comparison. For example if sign_of_dot_product was a list, we can use the following :

h = [element >=0 for element in sign_of_dot_product]

h will be a list of True/False

regards

Zakaria

1 Like

Thank you again, zakaria_hmaned!

If I use an ordinary Python list instead of a numpy array,

I should extract each element in the list and then compare it with 0 in a for-loop, right?

Throughout the communication with you, I could deepen my knowledge of Python.

Thanks a lot!

Sincerely,

Setsuro