首页 > 解决方案 > python Numpy数组输出为零的问题

问题描述

我想做平滑移动平均线(SMMA),但有些输出为零,我期望一个非零数组。下面的代码我做错了什么?

import numpy as np

arr1 = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])
smma = np.array([])
ma1 = np.array([])
ma2 = np.array([])
ma = []
ma1 = []
ma2 = []

def iMA(arr: np.array, length=10, pos=0):
    s = 0.0
    if len(arr) - pos < length:
        return s

    for i in range(pos, pos + length):
        rindex = i + 1
        s = s + arr[-rindex]

    return s / length

def iSMMA(arr: np.array, length=10, pos=0):
    if len(arr) - pos < length:
        return 0
    for i in range(pos, pos+1):
        if pos>=length-1:
            if i == length-1:
                global ma
                global arr_copy
                arr_copy = arr[:length]
                global smma
                smma = iMA(arr_copy, length)
                ma.append(smma)
            if i >= length and length > 2:
                smma = (smma * (length - 1) + arr[i]) / length
                ma.append(smma)
    return ma

pos=9
for i in range(pos,len(arr1)):
    a = iSMMA(arr1, 10,pos)
    ma1 = np.array(a)
    pos=pos+1
    print(ma1)

输出:

C:\Users\air\anaconda3\python.exe C:/Users/air/PycharmProjects/pythonProject4/main.py
[5.5]
[5.5  6.05]
[5.5   6.05  6.645]
[5.5    6.05   6.645  7.2805]
[5.5     6.05    6.645   7.2805  7.95245]
0
0
0
0
0
0
0
0
0

Process finished with exit code 0

标签: python

解决方案


推荐阅读