输入numpy数组到linspace和for循环范围问题
input numpy array to linspace and for loop range problem
我在尝试使用多个值进行测试时遇到问题,因为 for 循环中的 linspace 和 range 不接受数组作为输入。
这是我正在尝试做的一个例子:
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):
...
错误告诉我的内容:
Traceback (most recent call last):
文件“变量 gp.py”,第 306 行,在
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
如果我只是手动更改 gp 的值并希望我可以插入尽可能多的值来尝试,感觉这将成为一个坏习惯。谢谢。
如果我只是手动更改 gp 的值而不使用 def 函数,它工作正常
如果你也遇到过这种问题,我找到的解决方法:
for i in gp:
gp = i
x_l = np.linspace(0,3,gp)
...
for i in range(gp):
...
添加 gp = i 似乎可以绕过问题
如果你也遇到过这种问题,我找到的解决方法:
for i in gp:
gp = i
x_l = np.linspace(0,3,gp)
...
for i in range(gp):
...
添加 gp = i 似乎可以绕过问题
对于数组或列表的 gp
,像这样迭代:
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. ]
注意我在调用linspace
时使用i
,而不是gp
。
当我们将数组传递给 linspace
时,我们收到您的错误:
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
一般来说,在 for i in gp:
表达式中,不要在正文中使用 gp
。您想要使用迭代变量 i
。使用 for
循环的全部意义在于处理 gp
的元素,而不是处理整个循环。
我们也不能使用range
中的数组。它必须是数字元素,一次一个:
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]
我在尝试使用多个值进行测试时遇到问题,因为 for 循环中的 linspace 和 range 不接受数组作为输入。
这是我正在尝试做的一个例子:
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):
...
错误告诉我的内容:
Traceback (most recent call last):
文件“变量 gp.py”,第 306 行,在 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
如果我只是手动更改 gp 的值并希望我可以插入尽可能多的值来尝试,感觉这将成为一个坏习惯。谢谢。
如果我只是手动更改 gp 的值而不使用 def 函数,它工作正常
如果你也遇到过这种问题,我找到的解决方法:
for i in gp:
gp = i
x_l = np.linspace(0,3,gp)
...
for i in range(gp):
...
添加 gp = i 似乎可以绕过问题
如果你也遇到过这种问题,我找到的解决方法:
for i in gp:
gp = i
x_l = np.linspace(0,3,gp)
...
for i in range(gp):
...
添加 gp = i 似乎可以绕过问题
对于数组或列表的 gp
,像这样迭代:
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. ]
注意我在调用linspace
时使用i
,而不是gp
。
当我们将数组传递给 linspace
时,我们收到您的错误:
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
一般来说,在 for i in gp:
表达式中,不要在正文中使用 gp
。您想要使用迭代变量 i
。使用 for
循环的全部意义在于处理 gp
的元素,而不是处理整个循环。
我们也不能使用range
中的数组。它必须是数字元素,一次一个:
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]