numpy.diff问题的衍生物

时间:2014-02-13 11:13:28

标签: python arrays list numpy

我有这个问题:

我有一个包含7个元素的数组:

vector = [array([ 76.27789424]), array([ 76.06870298]), array([ 75.85016864]), array([ 75.71155968]), array([ 75.16982466]), array([ 73.08832948]), array([ 68.59935515])]

(这个数组是很多操作的结果)

现在我想用numpy.diff(vector)计算导数,但我知道该类型必须是一个numpy数组。

为此,我输入:

vector=numpy.array(vector);

如果我打印矢量,现在结果是:

[[ 76.27789424]
 [ 76.06870298]
 [ 75.85016864]
 [ 75.71155968]
 [ 75.16982466]
 [ 73.08832948]
 [ 68.59935515]]

但如果我尝试计算导数,则结果为[]

你能帮助我吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

vector是一个数组列表,要使1-D NumPy数组使用列表推导并将其传递给numpy.array

>>> vector = numpy.array([x[0] for x in vector])
>>> numpy.diff(vector)
array([-0.20919126, -0.21853434, -0.13860896, -0.54173502, -2.08149518,
       -4.48897433])

答案 1 :(得分:1)

  

vector = numpy.array(vector);

为您提供一个包含七行一列的二维数组

>>> vector.shape
(7, 1)

形状如下:(length axis 0, length axis 1, length axis 2, ...)

正如您所见,最后一根轴是axis 1,而长度是1

来自docs

  

numpy.diff(a,n = 1,轴= -1
  ...
  axis:int,可选
  取差异的轴,默认为最后一轴

无法区分单个值。因此,让我们尝试使用长度为7的第一个轴。由于轴计数从零开始,因此第一个轴为0

>>> np.diff(vector, axis=0)
array([[-0.20919126],
       [-0.21853434],
       [-0.13860896],
       [-0.54173502],
       [-2.08149518],
       [-4.48897433]])

请注意,每个衍生度都会缩短一个元素,因此新形状为(7-1, 1) (6, 1)。让我们验证一下

>>> np.diff(vector, axis=0).shape
(6, 1)