Reputation: 67
Let's say I have an array
a = ([6,8,10,13,15,18,21])
I have another array
b= ([2,5])
I want to return an array which gives me nonzero values of a%b. If any value in a mod any value in b equals zero, I don't want to return it.
c = ([13,21])
Using numpy.mod(a,b)
returns
ValueError: operands could not be broadcast together with shapes
How can I execute this?
Upvotes: 2
Views: 2273
Reputation: 61930
The problem refers to the fact that numpy cannot apply the np.mod
operation on the arrays with the given shape, one solution is to reshape, for example:
import numpy as np
a = np.array([6, 8, 10, 13, 15, 18, 21]).reshape((-1, 1))
b = np.array([2, 5])
print(a[np.mod(a, b).all(1)].reshape(-1))
Output
[13 21]
Note that you need to reshape back to obtain the requested output. The best solution is the one proposed by @PaulPanzer:
import numpy as np
a = np.array([6, 8, 10, 13, 15, 18, 21])
b = np.array([2, 5])
print(a[np.mod.outer(a, b).all(1)])
Output
[13 21]
Further
Upvotes: 2