Python 是否有一个与熊猫相当的numpy.apply?
我有一个调用,它将一些随机值添加到一个系列中:Python 是否有一个与熊猫相当的numpy.apply?,python,pandas,numpy,Python,Pandas,Numpy,我有一个调用,它将一些随机值添加到一个系列中: series = series.apply(lambda x: int(math.ceil(x + x * rand_value(range)))) 出于性能原因,我不能再使用pandas.Series,而必须使用numpy数组 假设我的1D数组数据存储在a中,我将如何将调用从上面转换为numpy?我读过关于np.vectorize的文章,但我不明白如何将其与lambda和自制函数一起调用。 我的想法是: 乍一看,似乎两个调用都会产生相同的输出,
series = series.apply(lambda x: int(math.ceil(x + x * rand_value(range))))
出于性能原因,我不能再使用pandas.Series,而必须使用numpy数组
假设我的1D数组数据存储在a
中,我将如何将调用从上面转换为numpy?我读过关于np.vectorize
的文章,但我不明白如何将其与lambda和自制函数一起调用。我的想法是: 乍一看,似乎两个调用都会产生相同的输出,但我不确定这一点。您能确认一下吗?
还有比使用
np.vectorize()更好的方法吗
编辑:rand_值(范围)的定义如下:
def rand_value(range):
# create value between [-1; 1)
rand = np.random.rand()*2.0 - 1.0;
rand = (rand * float(range)) / 100.0
return rand
所以我不能使用np.ceil
,因为这样我的函数只会被调用一次(?),并且总是具有相同的rand值,我需要的是,对于数组中的每个值,函数都会被调用。通过将一个形状传递给np.random.rand()
可以获得多个随机值。一旦你的随机值和你的输入数组一样多,你就可以使用普通的numpy函数了
import numpy as np
def rand_value(range, shape=None):
if shape is None:
shape = tuple()
rand = np.random.rand(*shape) * 2.0 - 1.0
rand = rand * range / 100.0
return rand
data = np.arange(16)
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
rand_value(100.0, shape=data.shape)
# array([-0.0083601 , 0.90346962, -0.70813122, -0.73467017, 0.87514163,
# -0.29496392, 0.63828971, -0.10086984, -0.60248423, 0.26550601,
# -0.17577315, -0.95178997, 0.64123385, -0.54732105, 0.28590572,
# 0.19727859])
np.ceil(data + data * rand_value(100.0, shape=data.shape)).astype(int)
# array([ 0, 1, 4, 6, 8, 4, 9, 3, 4, 17, 10, 18, 16, 12, 16, 30])
numpy.沿轴应用(rand\u value
和range
是如何定义的?在NumPy中如何执行此操作取决于此。您是否尝试过简单地执行a=NumPy.ceil(a+a*rand\u value(range))
?
import numpy as np
def rand_value(range, shape=None):
if shape is None:
shape = tuple()
rand = np.random.rand(*shape) * 2.0 - 1.0
rand = rand * range / 100.0
return rand
data = np.arange(16)
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
rand_value(100.0, shape=data.shape)
# array([-0.0083601 , 0.90346962, -0.70813122, -0.73467017, 0.87514163,
# -0.29496392, 0.63828971, -0.10086984, -0.60248423, 0.26550601,
# -0.17577315, -0.95178997, 0.64123385, -0.54732105, 0.28590572,
# 0.19727859])
np.ceil(data + data * rand_value(100.0, shape=data.shape)).astype(int)
# array([ 0, 1, 4, 6, 8, 4, 9, 3, 4, 17, 10, 18, 16, 12, 16, 30])