在for循环中切片numpy数组

l7wslrjt  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(111)

我有一个多维的弹性数组,其中一个维度是“年龄组”(0-92岁),另一个维度是“收入组”(低/高收入)。
我想创建一个表,其中包含使用for循环的每个子组组合的平均弹性。
我的代码如下:

import numpy as np

elasticity = np.random.rand(2,92)
print(elasticity.shape)

income = ['i0','i1']
age_gr= [':18','18:']

table = {}
for i in range(len(age_gr)):
    for j in range(len(income)):
        key = age_gr[i]+"_"+income[j]
        table[key] = np.mean(elasticity[age_gr[i],j])
print(table)

我的问题是“age_gr[i]”给了我一个错误“IndexError:只有整数,切片(:),省略号(...),numpy.newaxis(None)和整数或布尔数组是有效的索引。实际上我有更多的年龄组,所以我不能手动完成。
我希望有这样的结果:

其中...表示子组的弹性的平均值。
编辑:年龄范围为0-92岁,而不是之前所述的(低于/高于18岁)。

ktecyv1j

ktecyv1j1#

确切的预期输出尚不清楚,但可以肯定的是,您不能使用':18'字符串并期望它表现得像sliceslice(None, 18))。
你可以使用一个函数来转换:

import numpy as np

elasticity = np.random.rand(2,92)
print(elasticity.shape)

income = ['i0','i1']
age_gr= [':18','18:']

def str_to_slice(s):
    return slice(*(int(x) if x.isdigit() else None for x in s.split(':')))

table = {}
for i in range(len(age_gr)):
    for j in range(len(income)):
        key = age_gr[i]+"_"+income[j]
        table[key] = np.mean(elasticity[str_to_slice(age_gr[i]), j])
print(table)

输出:

{':18_i0': 0.19273470668594983,
 ':18_i1': 0.484071263606304,
 '18:_i0': nan,
 '18:_i1': nan}

相关问题