Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 二维列表中元素的平均值_Python_List - Fatal编程技术网

Python 二维列表中元素的平均值

Python 二维列表中元素的平均值,python,list,Python,List,我的清单如下: [[1, 1], [7, 7], [20, 20], [9, 9], [-12, -12]] 我试图得到一个新的列表,里面有相同数量的列表,但是通过计算元素前后的平均值来改变元素的值。 我这是什么意思 假设我有子列表sub=[7,7] 在指数1。我希望这个列表是[9,9],因为sub[1][0]+lst_在sub[0][0]+lst_之后,sub[1][0]=7+1+20=28,28//3=9我想要整数除法 理想的输出是: [[4, 4], [9, 9], [12, 12],

我的清单如下:

[[1, 1], [7, 7], [20, 20], [9, 9], [-12, -12]] 
我试图得到一个新的列表,里面有相同数量的列表,但是通过计算元素前后的平均值来改变元素的值。 我这是什么意思 假设我有子列表sub=[7,7] 在指数1。我希望这个列表是[9,9],因为sub[1][0]+lst_在sub[0][0]+lst_之后,sub[1][0]=7+1+20=28,28//3=9我想要整数除法

理想的输出是:

[[4, 4], [9, 9], [12, 12], [5, 5], [-1, -1]] 
我目前拥有以下代码:

copy_l = copy.deepcopy(audio_data)
sub_list = []
for i in range(0, len(audio_data)-1):
    sub_data = []
    for j in range(2):
        if i == 0:
            audio_data[i][j] += int(audio_data[i+1][j] / 2)
            sub_data.append(audio_data[i][j])
        elif audio_data[i+1] == audio_data[-1]:
            audio_data[i+1][j] = int((audio_data[i+1][j]+audio_data[i][j])/2)
            sub_data.append(audio_data[i+1][j])
        else:
            audio_data = copy_l
            audio_data[i][j] = int((audio_data[i-1][j] + audio_data[i][j] + audio_data[i+1][j])/3)
            sub_data.append(audio_data[i][j])
    sub_list.append(sub_data)
print(sub_list)
其中audio_data是我传入的列表[[1,1]、[7,7]、[20,20]、[9,9]、-12、-12]]

我将平均计算分为三种情况: -列表的第一个元素:[1,1]因此平均值仅为1+7//2[1,1]之前没有元素 -列表的最后一个元素:[-12,-12]所以平均值是-12+9//2[-12,-12]之后没有元素 -中间的所有元素

问题是,我的输出子列表是: [[4, 4], [9, 9], [12, 12], [-1, -1]] 似乎[9,9]永远不会变成[5,5] 有人知道如何实现我想要的吗,或者甚至有人知道如何使它更简单吗?我希望我已经够清楚了,如果不想问我更多的细节,谢谢

编辑:
我正在寻找一个没有numpy、列表理解或zip的解决方案。

以下是一种方法:

data = [[1, 1], [7, 7], [20, 20], [9, 9], [-12, -12]] 

out = []
for i in range(len(data)):
    first =  max(i -1, 0)  # don't have the start of the slice <0
    last = min(i + 2, len(data))  # neither beyond the end of the list
    mean = [sum(col) // (last-first) for col in zip(*data[first:last])]
    out.append(mean)

print(out)

# [[4, 4], [9, 9], [12, 12], [5, 5], [-2, -2]] 
我们对当前项周围的数据进行切片

然后,我们压缩子列表,并计算第一个响应的结果。子列表的第二个值


另外,请注意,使用Python的整数除法,我们得到-3//2的-2,而不是通过舍入到最接近0的值得到的-1。如果您真的想这样做,您必须为分区使用自定义函数。

这里有一个NumPy解决方案:

将numpy作为np导入 def Means3数据: 返回np.convolvenp.r_[data[:2].mean,data,data[-2:].mean],np.ones3,'valid'//3 >>>np.沿3、0、音频数据应用 数组[[4,4.], [ 9., 9.], [12., 12.], [ 5., 5.], [-2., -2.]] 或者,如果您喜欢整数除法的intx/y定义:

将numpy作为np导入 def Means3数据: 返回np.convolvenp.r_[data[:2].mean,data,data[-2:].mean],np.ones3,'valid'/3.astypeint >>>np.沿3、0、音频数据应用 数组[[4,4], [ 9, 9], [12, 12], [ 5, 5], [-1, -1]]
如果i==lendata-1,则last=i+2应为last=i+2,否则为1,因为当前您将最终总和除以3,而不是除以2。您的结果意外地与所需的输出一致,如-3//3==-1,但-3//2==-2和int-3/2==-1,但对于大多数其他列表,它将失败。是的!可惜我运气好,没注意到。。。谢谢结果的-1版本可以通过简单的带截断的浮点除法来实现:intsumcol/last first on The off-chance,它对OPHey很重要,感谢这个解决方案,我应该提到我不能使用zip或列表理解!你认为你可以把代码翻译成这样吗?注意最后一个元素可以是-1或-2,这取决于你对整除的定义。您描述的定义:-12+9//2等于-2,而代码int-12+9/2中的计算结果为-1。您是对的,我想要的是Intexpression列表理解和zip有什么问题?我只是不能使用它,我有一些说明。