使用self元素进行Numpy数组转换而不使用for循环

时间:2018-04-25 17:07:38

标签: python arrays numpy

我想以下列方式转换numpy数组中的所有元素:

x = np.array([1,2,3,6])
... some transformation
y = np.array([1, 0.5, 0.66, 0.5])

规则是:

y[i]=x[i]/x[i+1]

但是我不能使用for循环或者使用。

在这种情况下,我不知道如何使用地图或矢量化。有什么想法吗?

编辑:最终目标是从一个时间系列获得包含返回的numpy数组而不是值本身 编辑了y的值,因为它们不正确

2 个答案:

答案 0 :(得分:1)

您应该使用矢量化功能。由于最后一个元素始终为np.nan,因此您可以使用np.hstack附加此元素。

x = np.array([1,2,3,6])

res = np.hstack((x[:-1] / x[1:], np.nan))

# array([ 0.5       ,  0.66666667,  0.5       ,         nan])

我认为您问题中y的定义不正确,因为它与您提供的公式不符。

答案 1 :(得分:1)

你可以尝试这样的事情。

import numpy as np
x = np.array([1,2,3,6])
y = x / np.r_[x[1:],x[0]]

print(y)

输出

>>> y
[0.5        0.66666667 0.5        6.        ]

或者这可能会更快,但也有同样的想法:

import numpy as np
x = np.array([1,2,3,6])
y = x / np.roll(x, -1)
print(y)

输出

>>> y
[0.5        0.66666667 0.5        6.        ]