numpy 编辑函数以处理数组而不是列表

mrwjdhj3  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(129)

我有一个执行以下操作的函数:
1.使用列表作为输入
1.计算列表的和
1.将输出(总和)追加到输入列表
1.再次运行自身(这一次使用N+1个数据列表)。
我想对数字数组的输入做同样的事情,但我没有得到一个完整的解决方案。
这就是我目前所拥有的:

data = [15.5, 19.2, 27.8, 44.6, 71.0, 54.1, 60.2]

def AppendOutput(data, steps):

    for i in range(steps):
        s = sum(data)
        emp.append(s)
        data.append(emp)
    return data

s = AppendOutput(data, 3)

这将输出以下内容,这正是我想要的:

[15.5, 19.2, 27.8, 44.6, 71.0, 54.1, 60.2, 292.4, 584.8, 1169.6]

我目前的问题是,我正在尝试为一个数字数组的输入完成同样的事情。

data_array = np.array([data])

def AppendOutputNP(data, steps):
    for j in range(steps):
        temp = np.sum(data_array).reshape((-1,1))
        new = np.append(data_array, temp, axis=1)
    return new

AppendOutputNP(data_array, 3)

与原始函数相比,我得到了部分解;这一次只追加了一个元素,而不是三个:

array([[ 15.5,  19.2,  27.8,  44.6,  71. ,  54.1,  60.2, 292.4]])

有人能告诉我我做错了什么吗?

1sbrub3j

1sbrub3j1#

最好是在函数开始处形成结果数组。numpy.append相当慢。

def AppendSumNP(data, steps, dtype = np.float64 ):
    result = np.zeros( len(data) + steps, dtype = dtype ) 
    # The result array is big enough for the whole result
    result[ :len(data) ] = data
    for j in range( len(data), len(data) + steps ):
        result[ j ] = result[:j].sum()
    return result

第二个和是第一个的两倍,第三个是第二个的两倍,以此类推,所以只求和一次,然后乘以。

def AppendMultNP(data, steps, dtype = np.float64 ):
    result = np.zeros( len(data) + steps, dtype = dtype )
    result[ :len(data)] = data
    total = result[:len(data)].sum()
    for j in range( len(data), len(data) + steps ):
        result[ j ] = total
        total *= 2
    return result

这取决于数据列表的长度,但Mult方法的速度可能会快几倍。

相关问题