I have a function that uses np.meshgrid
to get the matrix form of supplied co-ordinates. I have a parameter dim
that determines what dimension I am working with and needs to return an array with dim
dimension along axis 1. I have attached an MWE below.
import numpy as np
def func(dim=2):
a = [1, 2]
return np.array(np.meshgrid([a]*dim)).T.reshape(-1, dim)
func()
"""
returns
array([[1, 2],
[1, 2]])
"""
However my expected output is
array([[1, 1],
[1, 2],
[2, 1],
[2, 2]])
, which is obtained by replacing return np.array(np.meshgrid([a]*dim)).T.reshape(-1, dim)
with return np.array(np.meshgrid(a, a)).T.reshape(-1, dim)
. Notice that I passed in (a, a)
as the parameters to np.meshgrid
, because dim=2
. If dim=3
, the input would be (a, a, a)
and so on.
How can I achieve this? If any other function can do this, I am open to that as well. Thanks.
Advertisement
Answer
Look at the difference between these:
def print_args(*args):
print(args)
a = [1, 2]
print_args([a] * 2)
# ([[1, 2], [1, 2]],)
print_args(*[a] * 2)
# ([1, 2], [1, 2])
In the first one you are passing a list of lists. In the second one you are unpacking (the first *
in func
) the list so each sub-list is a positional argument.
def func(dim=2):
a = [1, 2]
return np.array(np.meshgrid(*[a] * dim)).T.reshape(-1, dim)
func()
# array([[1, 1],
# [1, 2],
# [2, 1],
# [2, 2]])