I am having trouble trying to use multiple values to test since linspace and range in for loop is not accepting array as an input.
Here is an example of what I am trying to do:
gp_input = np.array([31,61])
def var_gp(gp):
for i in gp:
x_l = np.linspace(0,3,gp)
...
for i in range(gp):
...
What the error tells me:
Traceback (most recent call last):
File "variable gp.py", line 306, in var_gp(gp_input)
File "variable gp.py", line 18, in var_gp
x_l = np.linspace(0,3,gp)
File "<__array_function__ internals>", line 5, in linspace
File "/home/rjomega/anaconda3/lib/python3.8/site-packages/numpy/core/function_base.py", line 120, in linspace
num = operator.index(num)
TypeError: only integer scalar arrays can be converted to a scalar index
It feels like it would become a bad habit if I'll just manually change the value of gp and hoping I can just insert as much values to try. Thank you.
it works fine if I will just manually change the value of gp and not using def function
Solution I have found if you also experienced this kind of problem:
for i in gp:
gp = i
x_l = np.linspace(0,3,gp)
...
for i in range(gp):
...
adding gp = i seems to bypass the problem
For a gp
that's an array or list, iterate like this:
In [471]: gp = np.array([3,6])
In [472]: for i in gp:
...: print(i)
...: xi = np.linspace(0,3,i)
...: print(xi)
...:
3
[0. 1.5 3. ]
6
[0. 0.6 1.2 1.8 2.4 3. ]
Note that I use i
when calling linspace
, not gp
.
When we pass the array to linspace
we get your error:
In [473]: np.linspace(0,3,gp)
Traceback (most recent call last):
File "<ipython-input-473-7032efa38f7c>", line 1, in <module>
np.linspace(0,3,gp)
File "<__array_function__ internals>", line 5, in linspace
File "/usr/local/lib/python3.8/dist-packages/numpy/core/function_base.py", line 120, in linspace
num = operator.index(num)
TypeError: only integer scalar arrays can be converted to a scalar index
In general in a for i in gp:
expression, don't use gp
with the body. You want to use i
, the iteration variable. The whole point to using a for
loop is to work with the elements of gp
, not with the whole thing.
We can't use the array in range
either. It has to be number elements, one at a time:
In [477]: range(gp)
Traceback (most recent call last):
File "<ipython-input-477-4e92b04fe1fc>", line 1, in <module>
range(gp)
TypeError: only integer scalar arrays can be converted to a scalar index
In [478]: for i in gp:
...: print(list(range(i)))
...:
[0, 1, 2]
[0, 1, 2, 3, 4, 5]