When i try to find even numbers with where() method in 1-D array, it returns me odd numbers. Why?
Question:
I am working on numpy and when i was trying numpy methods on my editor, i noticed an anormal situation for me.
Firstly, I created a numpy array (nd.array) like that:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
After that, I tried to get even numbers from the array and I wrote this code line:
even_numbers_in_array = np.where(arr%2 == 0)
and I thought it should return a tuple that contains even numbers but it returns me opposite of that:
In [33]: even_numbers_in_array
Out[33]: (array([ 1, 3, 5, 7, 9, 11], dtype=int64),)
after this result, I was shocked because there are 9
, 10
, 11
values even if they are not in the array.
Can anybody explain that strange situation to me?
Thank you
I use spyder(anaconda3) editor and w11 operating system
Answers:
You don’t need np.where
:
>>> arr[arr % 2 == 0]
array([2, 4, 6, 8])
Note: np.where
returns the index not the number itself.
>>> arr[np.where(arr % 2 == 0)[0]]
array([2, 4, 6, 8])
You are confused because you use a particular array [1, 2, 3, 4, 5, 6, 7, 8]
. Try with another series:
arr = np.array([11, 12, 13, 14, 15, 16, 17, 18])
>>> np.where(arr % 2 == 0)
(array([1, 3, 5, 7]),)
>>> arr[arr % 2 == 0]
array([12, 14, 16, 18])
I am working on numpy and when i was trying numpy methods on my editor, i noticed an anormal situation for me.
Firstly, I created a numpy array (nd.array) like that:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
After that, I tried to get even numbers from the array and I wrote this code line:
even_numbers_in_array = np.where(arr%2 == 0)
and I thought it should return a tuple that contains even numbers but it returns me opposite of that:
In [33]: even_numbers_in_array
Out[33]: (array([ 1, 3, 5, 7, 9, 11], dtype=int64),)
after this result, I was shocked because there are 9
, 10
, 11
values even if they are not in the array.
Can anybody explain that strange situation to me?
Thank you
I use spyder(anaconda3) editor and w11 operating system
You don’t need np.where
:
>>> arr[arr % 2 == 0]
array([2, 4, 6, 8])
Note: np.where
returns the index not the number itself.
>>> arr[np.where(arr % 2 == 0)[0]]
array([2, 4, 6, 8])
You are confused because you use a particular array [1, 2, 3, 4, 5, 6, 7, 8]
. Try with another series:
arr = np.array([11, 12, 13, 14, 15, 16, 17, 18])
>>> np.where(arr % 2 == 0)
(array([1, 3, 5, 7]),)
>>> arr[arr % 2 == 0]
array([12, 14, 16, 18])