在python

时间:2018-02-26 10:40:29

标签: python-2.7 numpy

我有两个1D矩阵A和B,在某些随机位置包含NaN个值。我想明智地添加这些矩阵元素(C[i] = A[i] + B[i])并取元素和的平均值。这在以下代码中运行良好且有效:

import numpy as np
# Create some fake matrices
A = np.arange(0,10,0.5)
B = 10.0*np.arange(0,10,0.5)

# Replace some random elements in A and B with NaN 
A[15] = np.nan
A[16] = np.nan
A[17] = np.nan
A[18] = np.nan
B[1] = np.nan
B[2] = np.nan
B[17] = np.nan
B[18] = np.nan

# Sum over A and B, element wise, and take the mean of the sums
C = 0.5 * ( np.where(np.isnan(A), B, A + np.nan_to_num(B)) )

但是,如果A[i]B[i]中的一个包含NaN而另一个不包含NaN,则我不想采用总和的平均值,而是保留值为A array([ 0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5., 5.5, 6., 6.5, 7., nan, nan, nan, nan, 9.5]) B array([ 0., nan, nan, 15., 20., 25., 30., 35., 40., 45., 50., 55., 60., 65., 70., 75., 80., nan, nan, 95.]) # What I eventually want C to be: C array([ 0., 0.5, 1. , 8.25, 11., 13.75, 16.5, 19.25, 22., 24.75, 27.5, 30.25, 33., 35.75, 38.5, 75., 80., nan, nan, 52.25]) 的矩阵的值。这个我一直无法解决。

换句话说(给定A和B)最终我希望C为:

entry: {
  vendor: ['@babel/polyfill', 'react', 'react-dom', 'redux'],
  client: './client.js',
},
optimization: {
  splitChunks: {
    cacheGroups: {
      vendor: {
        chunks: 'initial',
        name: 'vendor',
        test: 'vendor',
        enforce: true
      },
    }
  },
  runtimeChunk: true
}

有没有人有任何(有效的)建议我怎么做? (例如,如果可能的话,我想避免耗时的循环。)

1 个答案:

答案 0 :(得分:1)

当两个号码都是np.nan时,NumPy nanmean会生成警告,但它会提供您想要的结果:

C = np.nanmean([A, B], axis=0)