-1

我在尝试使用多个值进行测试时遇到了麻烦,因为 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):

var_gp(gp_input) 中的文件“变量 gp.py”,第 306 行

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 似乎绕过了这个问题

4

2 回答 2

0

如果您也遇到此类问题,我发现了解决方案:

for i in gp:
       gp = i
       x_l = np.linspace(0,3,gp)
          ...
       for i in range(gp):
          ...

添加 gp = i 似乎绕过了这个问题

于 2021-06-26T04:07:06.673 回答
0

对于一个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. ]

请注意,我i在调用时使用linspace,而不是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]
于 2021-06-26T04:32:11.953 回答