当前位置: 首页 > 知识库问答 >
问题:

麻烦迭代数组以求3个数组的平均,并与其他3个数组进行比较

麹高义
2023-03-14
import numpy as np
import math
array = [1,2,3,4,5,6,7,8,9,10,11,12]
for k in range(len(array)):
    target1 = array[k]
    target2 = array [k-1]
    if k<11:
        target3 = array[k+1]
    else:
        target3 = array[0]
    targets = [target1, target2, target3]
    target = np.mean(targets)
    sigma = 1
    if ((target-avg)/(math.sqrt(target))>= sigma:
        print(array[k])
    if k < 8:
            range1_target1 = array[k+2]
            range1_target2 = array[k+3]
            range1_target3 = array[k+4]

共有1个答案

屠华辉
2023-03-14

首先,定义平均函数,一个计算可迭代对象中值的平均值的函数:

def average(iterable):
    sum = 0
    for number in iterable:
        sum += number
    return sum / len(iterable)

这个函数非常简单。它定义了一个名为“sum”的变量,并将其初始值设置为0。然后循环遍历参数“iterable”,将iterable参数中每个元素的值添加到sum。然后,它将所有值的和(sum变量)除以Iterable的长度。它将结果作为浮点返回。

一个例子:函数被调用。iterable参数被分配给列表[25,75,-100,20]。sum变量被初始化为0。通过循环迭代,它将25、75、-100和20加到sum。加起来是20。按照Python的len()方法,iterable的长度是4。20/4=5.0(一个浮点,因为Python中的一个斜杠总是表示真除法,并且返回一个浮点,即使在转换为int后结果保持不变。使用两个斜杠进行整数除法),因此方法返回5.0。

averages = []

很简单。将全局变量“Average”设置为空列表。

因为您需要每三个数字的平均值,所以应该将迭代范围设置为步骤3,而不是步骤1。这是这样做的。

for counter in range(0, len(array), 3):

范围构造函数最多接受三个参数(start、stop、step)。当它接受三个参数时,它从“start”开始计数,从“step”开始计数,从“stop”开始计数,从“stop”停止。它记录在一个不可变的可迭代对象中计数的每个数字。当它接受两个参数时,“step”被设置为1。当它接受一个参数时,“start”被设置为0,“stop”被设置为该参数,“step”被设置为1。

    averages.append(average(array[counter: counter+3: 1]))

你现在得到了所有的平均数。不需要担心IndexError,因为切片忽略任何超出范围的索引,而不会引发异常。

接下来,我们想把平均值相互比较一下。代码如下:

for i in range(0, len(averages)):
    for j in range(0, len(averages)):
        if i == j:
            #Avoid duplicate averages.
            continue
        if averages[i] < averages[j]:
            #averages[i] < averages[j]. 
            #Do something
            continue
        elif averages[i] == averages[j]:
            #averages[i] == averages[j]. 
            #Do something
            continue
        else:
            #averages[i] > averages[j]. Only possibility left. 
            #Do something
            continue

就是这么做的。我们在平均数上迭代索引,而不是平均数本身,以测试是否重复。如果索引彼此相等,那么我们继续循环,因为我们不想处理它们。否则,我们将Averages[i]与Averages[j]进行比较,并根据条件执行python语句。你没有说明你想做什么,所以我只是处理他们像重复,尽管所有你不应该。代码的其余部分是不言自明的。

现在,完整的代码。无注释:

def average(iterable):
    sum = 0
    for number in iterable:
        sum += number
    return sum / len(iterable)

#Same old array that you mentioned in your question
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

averages = []

for counter in range(0, len(array), 3):
    averages.append(average(array[counter: counter+3: 1]))

for i in range(0, len(averages)):
    for j in range(0, len(averages)):
        if i == j:
            #Avoid duplicate averages.
            continue
        if averages[i] < averages[j]:
            #averages[i] < averages[j]. 
            #Do something
            continue
        elif averages[i] == averages[j]:
            #averages[i] == averages[j]. 
            #Do something
            continue
        else:
            #averages[i] > averages[j]. Only possibility left. 
            #Do something
            continue
def average(iterable):
    sum = 0
    for number in iterable:
        sum += number
    return sum / len(iterable)

#Same old array that you mentioned in your question
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

averages = []

for counter in range(0, len(array), 3):
    averages.append(average(array[counter: counter+3: 1]))

for i in range(0, len(averages)):
    for j in range(0, len(averages)):
        if i == j:
            #Avoid duplicate averages.
            continue
        if averages[i] < averages[j]:
            #averages[i] < averages[j]. 
            #Do something
            print("averages[{}] < averages[{}]".format(i, j))
        elif averages[i] == averages[j]:
            #averages[i] == averages[j]. 
            #Do something
            print("averages[{}] = averages[{}]".format(i, j))
        else:
            #averages[i] > averages[j]. Only possibility left. 
            #Do something
            print("averages[{}] > averages[{}]".format(i, j))

print("Averages: ", averages)

averages[0] < averages[1]
averages[0] < averages[2]
averages[0] < averages[3]
averages[1] > averages[0]
averages[1] < averages[2]
averages[1] < averages[3]
averages[2] > averages[0]
averages[2] > averages[1]
averages[2] < averages[3]
averages[3] > averages[0]
averages[3] > averages[1]
averages[3] > averages[2]
Averages:  [2.0, 5.0, 8.0, 11.0]
 类似资料:
  • 正如标题所示,我想将两个数组串联成一个更大的数组。例如: 一切顺利。我用的方法“专业”吗?}

  • 我有一个Numpy数组如下: 并希望使用np.greater将每行中的“向量”与其他行进行比较,以便: 但是如果我尝试它会将中的每个数字与中的每个其他数字进行比较,因此: 如何使外部比较行明智而不是元素明智?

  • 我想将一个阵列与另一个阵列进行比较: 我想检测数组2是否包含数组1中没有的名称。 数组2可以比数组1长或短,换句话说,数组2可能缺少名称或名称比数组1多,但数组2不能具有与数组1不同的名称。 到目前为止,我可以检测出数组2是否比数组1长。如果是,它显然是在添加名称,因此是无效的: 但是如果这不够精确(如果两个数组有相同数量的值,即使单个值不相关,它也返回true)。 请参见以下示例场景: 我假设我

  • 我有3个非常大的有符号整数。 我想计算它们的截断平均值。预期平均值是,即。 不可能计算为: 注:我读了所有关于2个数字的平均值的问题,但我不知道该技术如何应用于3个数字的平均值。 使用BigInteger将非常容易,但假设我不能使用它。 如果我转换为双精度,那么,当然,我会失去精度: 如果我转换为,它可以工作,但也让我们假设我不能使用它。 问题:有没有一种方法可以仅使用长类型来计算3个非常大整数的

  • 到目前为止,我的函数找到3个数字的中位数并对它们进行排序,但它总是进行三次比较。我想我可以在某个地方使用嵌套的if语句,这样有时我的函数只会进行两次比较。 我不确定我在哪里可以使嵌套的if语句。

  • 3. 指针与数组 先看个例子,有如下语句: int a[10]; int *pa = &a[0]; pa++; 首先指针pa指向a[0]的地址,注意后缀运算符的优先级高于单目运算符,所以是取a[0]的地址,而不是取a的地址。然后pa++让pa指向下一个元素(也就是a[1]),由于pa是int *指针,一个int型元素占4个字节,所以pa++使pa所指向的地址加4,注意不是加1。 下面画图理解。从前