a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], np.int32)
b = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], np.int32)
print(a*b)
#Result:
[[ 1  4  9]
 [16 25 36]
 [49 64 81]]a = np.array([[2, 3, 2],
              [3, 3, 3],
              [2, 3, 2]], np.float64)
b = a < 3
print(b.type)
#result:
[[ True False  True]
 [False False False]
 [ True False  True]]a = np.array([[True,  False,  True],
              [False, False,  False],
              [True,  False,  True]], np.bool)
b = np.array([[2, 2, 2],
              [2, 2, 2],
              [2, 2, 2]], np.float64)
b[a] += 2
print(b)
#result:
[[4. 2. 4.]
 [2. 2. 2.]
 [4. 2. 4.]]a = np.array([[True,  False,  True],
              [False, False,  False],
              [True,  False,  True]], np.bool)
a = np.logical_not(a)
print(a)
#result:
[[False  True False]
 [ True  True  True]
 [False  True False]]a = np.array([[2, 2, 2],
              [2, 2, 2],
              [2, 2, 2]], dtype=float)
b = np.full(c.shape, 1000, dtype=int)
print(b)
#result
[[1000 1000 1000]
 [1000 1000 1000]
 [1000 1000 1000]]@jit
def square(x):
    return x ** 2#return and parameter type defined
@jit(int32(int32))
def square(x):
    return x ** 2#automatic parallelization
@jit(float32[:](float32[:], float32[:]), nopython=True, parallel=True)
def mul(arr1, arr2):
    return arr1*arr2
mul(np.random.rand(1000,1000), np.random.rand(3,2))