如何解决在没有 for 循环的情况下通过一个具有顺序和均值计算的 numpy 数组
我想把这个 for 循环变成一个 numpy 函数。 y_mean
函数从 numbers
中一次检查 list_
变量中声明的数字数量,然后打印出它的平均值,因此它计算 {{1} 的平均值} 然后为 457.334015,424.440002
依此类推,直到到达 424.440002,394.795990
的末尾。对于 list
,y 将乘以 x 的位置顺序。因此,由于前两个数字是 xy_mean
,因此计算结果为 457.334015,424.440002
,第二个和第三个数字为 (1 * 457.334015+ 2 * 424.440002)/number)
。如何在不使用 for 循环的情况下将这两个函数转换为 numpy 形式。
香草形式:
(2* 424.440002+ 3* 394.795990)/number
Numpy 形式:
list_ = [457.334015,424.440002,394.795990,408.903992,398.821014,402.152008,435.790985,423.204987,411.574005,404.424988,399.519989,377.181000,375.467010,386.944000,383.614990,375.071991,359.511993,328.865997,320.510010,330.079010,336.187012,352.940002,365.026001,361.562012,362.299011,378.549011,390.414001,400.869995,394.773010,382.556000]
number = 2
for i in range(len(list_)-number):
y_mean = sum(list_[i:i+number])/number
xy_mean = sum([x * (i + 1) for i,x in enumerate(PC_list[i:i+number])])/number
解决方法
假设 OP 打算将值附加到一个列表中,而 PC_list
只是另一个与 list_
大小相同的列表,这可以使用 np.convolve
>
import numpy as np
list_ = np.array([457.334015,424.440002,394.795990,408.903992,398.821014,402.152008,435.790985,423.204987,411.574005,404.424988,399.519989,377.181000,375.467010,386.944000,383.614990,375.071991,359.511993,328.865997,320.510010,330.079010,336.187012,352.940002,365.026001,361.562012,362.299011,378.549011,390.414001,400.869995,394.773010,382.556000])
PC_list = np.random.rand(len(list_))
number = 2
y_mean_list = []
xy_mean_list = []
for i in range(len(list_)-number):
y_mean = sum(list_[i:i+number])/number
xy_mean = sum([x * (i + 1) for i,x in enumerate(PC_list[i:i+number])])/number
y_mean_list.append(y_mean)
xy_mean_list.append(xy_mean)
ym = (np.convolve(list_,np.ones(shape=(number)),mode='valid')/number)[:-1]
xym = (np.convolve(PC_list,np.arange(number,-1),mode='valid')/number)[:-1]
print(np.allclose(xym,xy_mean_list))
print(np.allclose(ym,y_mean_list))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。