

indices = np.array([0, 3, 4])
print(a[indices])

indices = np.array([0, 0, 5, 5])
print(a[indices])

indices = np.array([1,2,3], [5,8,9])
print(f"indices: \n{indices}")

a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
print("a[0]: ", a[0])
print("a[1]: ", a[1])
print("a[2]: ", a[2])



indices = np.array([0, 2])
print(f"indices: \n{indices}")
print(f"a[indices]: \n{a[indices]}")


a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
indices = np.array([0,0,1,1,2,2])
print(f"indices: \n{indices}")
print(f"a[indices]: \n{a[indices]}")

a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
indices = np.array([0,1,2], [-3,-2,-1])
print(f"indices: \n{indices}")

indices0, indices1 = np.array([0,1,2]), np.array([1,2,3])
print("Paired indices")
for idx0, idx1 in zip(indices0, indices1):
print(f"({idx0}, {idx1})")
print(f"a[indices0, indices1]: \n{a[indices0, indices1]}")

a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
indices0 = np.array([0,1,2], [0,1,2])
indiecs1 = np.array([0,1,2], [1,2,3])
print("Paired indices")
for row_indices0, row_indices1 in zip(indices0, indices1):
for idx0, idx1 in zip(row_indices0, row_indices1):
print(f"({idx0}, {idx1})", end = ' ')
print()
print(f"a[indices0, indices1]: \n{a[indices0, indices1]}")
# Indexing with int ndarrays
a = np.arange(10)
print(f"ndarray: \n{a}\n")
indices = np.array([0, 3, 4])
print(a[indices])
indices = np.array([0, 0, 5, 5])
print(a[indices])
indices = np.array([1,2,3], [5,8,9])
print(f"indices: \n{indices}")
print(f"a[indices]: \n{a[indices]}")
a = np.random.randint(0, 20, (10, ))
print(f"ndarray: \n{a}\n")
indices = np.random.randint(0, 10, size = (2,3,4))
print(f"indices: \n{indices}")
print(f"a[indices]: \n{a[indices]}")
#
a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
print("a[0]: ", a[0])
print("a[1]: ", a[1])
print("a[2]: ", a[2])
#
indices = np.array([0, 2])
print(f"indices: \n{indices}")
print(f"a[indices]: \n{a[indices]}")
#
a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
indices = np.array([0,0,1,1,2,2])
print(f"indices: \n{indices}")
print(f"a[indices]: \n{a[indices]}")
#
a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
indices = np.array([0,1,2], [-3,-2,-1])
print(f"indices: \n{indices}")
#
a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
indices0, indices1 = np.array([0]), np.array([0])
print(a[indices0, indices1])
indices0, indices1 = np.array([1]), np.array([2])
print(a[indices0, indices1])
indices0, indices1 = np.array([-1]), np.array([0])
print(a[indices0, indices1])
indices0, indices1 = np.array([-1]), np.array([-1])
print(a[indices0, indices1])
#
indices0, indices1 = np.array([0,1,2]), np.array([1,2,3])
print("Paired indices")
for idx0, idx1 in zip(indices0, indices1):
print(f"({idx0}, {idx1})")
print(f"a[indices0, indices1]: \n{a[indices0, indices1]}")
#
a = np.arange(12).reshape((3,4))
print(f"ndarray: \n{a}\n")
indices0 = np.array([0,1,2], [0,1,2])
indiecs1 = np.array([0,1,2], [1,2,3])
print("Paired indices")
for row_indices0, row_indices1 in zip(indices0, indices1):
for idx0, idx1 in zip(row_indices0, row_indices1):
print(f"({idx0}, {idx1})", end = ' ')
print()
print(f"a[indices0, indices1]: \n{a[indices0, indices1]}")