我想以下列方式转换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的值,因为它们不正确
答案 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. ]