【问题标题】:Does poly function accept only the list as its 1st argument when I tried to pass an numpy array as an 1st argument it is showing an error当我尝试将 numpy 数组作为第一个参数传递时,poly 函数是否只接受列表作为其第一个参数,它显示错误
【发布时间】:2019-08-05 00:18:57
【问题描述】:

当我尝试将 numpy 数组作为第一个参数传递时,poly 函数是否只接受列表作为其第一个参数,但它不起作用。

import numpy
A=list(map(float,raw_input().split()))
k=int(raw_input())
print numpy.polyval(A,k) 

上面的代码可以工作,但是

import numpy
A=numpy.array([raw_input().split()],float)
k=int(raw_input())
print k,A
print numpy.polyval(A,k) 

上面的代码不起作用

import numpy
A=numpy.array([raw_input().split()],float)
k=int(raw_input())
print k,A
print numpy.polyval(A,k)

【问题讨论】:

  • raw_input() 返回什么?
  • 请显示错误。 does not work 不是有用的描述。 A 可以是一个数组。
  • 正如@Tiendung 所展示的那样确实 工作 - 只有它返回一个值数组,而不是您期望的一个标量。没有错误!

标签: python python-2.7 numpy


【解决方案1】:

来自the docs,在numpy.polyval(p, x)p 必须是类数组(例如数字列表)的一维数组。

在您的第一个代码中,A 是一个满足上述条件的数字列表。 测试结果:

>>> import numpy
>>> A=list(map(float,raw_input().split()))
1 2 3 5
>>> k=int(raw_input())
5
>>> print numpy.polyval(A,k)
195.0
>>> A # show how A looks like
[1.0, 2.0, 3.0, 5.0]

在您的第二个代码中,您的 A 是一个 1x4 二维数组,看看 polyval() 返回什么:

p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]

由于A.shape[0] == 1,它只会返回p[N-1],这是一个系数数组。

>>> import numpy
>>> A=numpy.array([raw_input().split()],float)
1 2 3 5
>>> k=int(raw_input())
5
>>> print k,A
5 [[1. 2. 3. 5.]]
>>> print numpy.polyval(A,k)
[1. 2. 3. 5.]

另一个例子:

>>> import numpy
>>> a = numpy.array([[1, 2], [10, 20]])
>>> a
array([[ 1,  2],
       [10, 20]])
>>> k = int(raw_input())
3
>>> numpy.polyval(a, k)
array([13, 26])

结果说明:

13 = 1 * 3 + 10
26 = 2 * 3 + 20
array([13, 26]) = a[0] * k**1 + a[1]

解决方案: 去掉大括号[]:

import numpy
>>> A=numpy.array(raw_input().split(),float)
1 2 3 5
>>> A
array([1., 2., 3., 5.])
>>> k = int(raw_input())
5
>>> print numpy.polyval(A,k)
195.0

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2023-03-19
    • 2019-10-19
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多