如何在python中循环函数变量?

2024-04-19 00:09:03 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我当前的代码:

import numpy as np

vec0 = [1, 2, 3]
vec1 = [2, 3, 4]
vec2 = [3, 4, 5]
vec3 = [4, 5, 6]

for k in range(0, 4):
    globals()['mean%s' % k] = np.mean('vec'+str(k))

我得到这个错误:

TypeError: cannot perform reduce with flexible type


我想知道这个结果。你知道吗

mean0 = np.mean(vec0)
mean1 = np.mean(vec1)
mean2 = np.mean(vec2)
mean3 = np.mean(vec3)

Tags: 代码inimportnumpyforasnprange
3条回答

您可以这样做:

vecs = [vec0, vec1, vec2, vec3]

然后:

globals()['mean%s' % k] = np.mean(vecs[k])

尽管如此,您应该避免这种方法,而是维护一个2D Array,这对于使用行轴的计算方法来说会更容易。你知道吗

我的意思是,不是这样:

vec0 = [1, 2, 3]
vec1 = [2, 3, 4]
vec2 = [3, 4, 5]
vec3 = [4, 5, 6]

你可以这样做:

vecs = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]])

然后你可以简单地计算如下:

meansArray = vecs.mean(axis=1)

你的mean0, mean1, mean2, mean3在各自的索引中。你知道吗

用名称调用变量是一种反模式。如果需要对多个对象执行任务,可以构造这些对象的集合(元组、列表等)。例如:

all_vecs = [vec0, vec1, vec2, vec3]

此外,通过指定axis参数,您现在可以使用numpy轻松处理批量中的平均值:

all_means = np.mean(all_vecs,axis=1)

然后:

>>> all_means
array([ 2.,  3.,  4.,  5.])

您可以通过更改:

globals()['mean%s' % k] = np.mean('vec'+str(k))

globals()['mean%s' % k] = np.mean(globals()['vec%s' % k])

但我强烈建议使用向量:

all_vec = [vec0, vec1, vec2, vec3]

相关问题 更多 >