使用vectorise时在python numpy.mean函数中遇到奇怪的问题

Posted

技术标签:

【中文标题】使用vectorise时在python numpy.mean函数中遇到奇怪的问题【英文标题】:Encountering strange issue in python numpy.mean function when using vectorise 【发布时间】:2021-08-04 00:48:03 【问题描述】:

我正在编写一个函数并将一个嵌套列表传递给它。目标是找到每个嵌套列表的平均值。例如。如果以下是输入

[[1914.05004882812], [1930.65002441406, 1934.5]]

我希望输出如下所示,每个列表的平均值。

[1914.05004883 1932.57501221]

这对某些人有效,但对于某些值,我得到的是嵌套列表。下面是函数和输出。你能告诉我我在这里做错了什么吗?我正在学习 python,如果我使用的术语不正确,请见谅。我正在使用 google colab 进行测试。

def groupmeancalc(groups):
  print('type of group is ' + str(type(groups)))
  print(groups)
  print('size of group is ' + str(len(groups)))
  if len(groups)==1:
    nparrr=np.array(groups)
    nparr=np.mean(nparrr)
    print('Below are the values')
    print(nparr)
  else:
    nparrr=np.array(groups)
    nparr=np.vectorize(np.mean)(nparrr)
    print('Below are the values')
    print(nparr)

以下是预期的输出。

type of group is <class 'list'>
[[1918.80004882812], [1938.69995117188, 1940.05004882812]]
size of group is 2
Below are the values
[1918.80004883 1939.375     ]


type of group is <class 'list'>
[[5510.2001953125, 5519.9501953125], [5545.10009765625]]
size of group is 2
Below are the values
[5515.07519531 5545.10009766]

下面是我没有得到预期输出的地方。在这里您可以看到嵌套列表没有展平,并且无论存在 2 个或更多元素,均不计算平均值。

type of group is <class 'list'>
[[1355.59997558594], [1363.0], [1372.05004882812]]
size of group is 3
Below are the values
[[1355.59997559]
 [1363.        ]
 [1372.05004883]]


type of group is <class 'list'>
[[1349.15002441406, 1351.5], [1358.90002441406, 1359.0]]
size of group is 2
Below are the values
[[1349.15002441 1351.5       ]
 [1358.90002441 1359.        ]]

【问题讨论】:

不要使用vectorize!它不会做任何更快的事情,而且很难做到正确。 【参考方案1】:

如果您需要一个列表作为输出,我认为map 会起作用:

def map_f(x):
    return list(map(np.mean,x))

试试:

map_f([[1914.05004882812], [1930.65002441406, 1934.5]])
[1350.3250122070299, 1358.9500122070299]

map_f([[1349.15002441406, 1351.5], [1358.90002441406, 1359.0]])
[1350.3250122070299, 1358.9500122070299]

map_f([[1355.59997558594], [1363.0], [1372.05004882812]])
[1355.59997558594, 1363.0, 1372.05004882812]

【讨论】:

以上是关于使用vectorise时在python numpy.mean函数中遇到奇怪的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gmail API (python) 时在标题中显示名字和姓氏

运行时在 Python 上使用 Pickle 的应用程序崩溃

如何在使用Jupyter Console时在python中查看类定义?

numpy 使用

复制文件时在控制台中显示进度条。在 python 中使用 tqdm

管道时在python的子进程模块中使用stdout.close()