Skip to main content
 首页 » 编程设计

python之无法正确索引 NUMPY 数组的列表

2025年05月04日15cyq1162

我有一个大数组列表。每个数组都包含数据。我还有另一个平均数组,其中每一行包含每个数据数组的平均值。对于数据数组中的每一行,我想减去该行的平均值。下面显示了我正在尝试的一个较小示例:

data = [array([[ 13.964,  13.983,  14.03 , 13.788,  13.771,  13.781],  
               [ 13.845,  13.854,  13.896, 13.688,  13.657,  13.675]]), 
        array([[ 14.182,  14.184,  14.223, 14.006,  13.991,  14.001], 
               [ 14.216,  14.231,  14.271, 14.042,  14.023,  14.035]]), 
        array([[ 15.717,  15.761,  15.812, 15.488,  15.444,  15.489], 
               [ 15.861,  15.943,  15.995, 15.64 ,  15.613,  15.62 ]])] 
 
avgs = array([[ 13.9045,  13.9185,  13.963 ,  13.738 ,  13.714 ,  13.728 ], 
              [ 14.199 ,  14.2075,  14.247 ,  14.024 ,  14.007 ,  14.018 ], 
              [ 15.789 ,  15.852 ,  15.9035,  15.564 ,  15.5285,  15.5545]]) 

我想要生成的是这样的:(这是一个非常简单的示例,每个数组只有两行,但本质上我想从各种数据数组的每一行中减去数组的平均值。)

subtracted_data = [array([[ 0.0595,  0.0645,  0.067 ,  0.05  ,  0.057 ,  0.053 ], 
                          [-0.0595, -0.0645, -0.067 , -0.05  , -0.057 , -0.053 ]]), 
                   array([[-0.017 , -0.0235, -0.024 , -0.018 , -0.016 , -0.017 ], 
                          [ 0.017 ,  0.0235,  0.024 ,  0.018 ,  0.016 ,  0.017 ]]) 
                   array([[-0.072 , -0.091 , -0.0915, -0.076 , -0.0845, -0.0655], 
                          [ 0.072 ,  0.091 ,  0.0915,  0.076 ,  0.0845,  0.0655]])] 

我试着这样做:

subtracted_data = [[]]*len(data) 
for i in range(len(data)): 
    for j in data[i]: 
        subtracted_data[i].append(data[i][j] - avgs[i]) 

没有成功。我想知道我是否正确地处理了这个问题。

请您参考如下方法:

当然,更好的做法是不使用数组列表,而是使用更高维的数组。在你的情况下:

>>> data = np.array(data) 
>>> data.shape 
(3L, 2L, 6L) 
>>> avgs.shape 
(3L, 6L) 
>>> data - avgs[:, None, :] 
array([[[ 0.0595,  0.0645,  0.067 ,  0.05  ,  0.057 ,  0.053 ], 
        [-0.0595, -0.0645, -0.067 , -0.05  , -0.057 , -0.053 ]], 
 
       [[-0.017 , -0.0235, -0.024 , -0.018 , -0.016 , -0.017 ], 
        [ 0.017 ,  0.0235,  0.024 ,  0.018 ,  0.016 ,  0.017 ]], 
 
       [[-0.072 , -0.091 , -0.0915, -0.076 , -0.0845, -0.0655], 
        [ 0.072 ,  0.091 ,  0.0915,  0.076 ,  0.0845,  0.0655]]])