代码之家  ›  专栏  ›  技术社区  ›  kirerik

python:将nan分配给其他三个矩阵的给定语句的矩阵元素

  •  0
  • kirerik  · 技术社区  · 7 年前

    下面的代码不起作用,但如果上面不清楚的话,也许至少可以说明我的雄心壮志。

    import numpy as np
    # Create the fake matrices A, B, C, D
    A = np.full((4,5), np.nan)
    A[0,0] = 2
    A[1,1] = 2
    A[2,2] = 2
    A[3,3] = 2
    A[1,3] = 2
    B = np.random.rand(4,5)
    C = np.arange(0.0, 0.1, 0.02)
    D = np.ones([4,5])
    
    # First loop: meant to fulfill the first statement
    for i in np.arange(4):
        for j in np.arange(5):
            D[i,j][np.isnan(A[i,j])] = np.nan
    
    # Second loop: meant to fulfill the second statement
    for i in np.arange(4):
        for j in np.arange(5):
            if B[i,j] < (0.3 - C[j]) or B[i,j] > (0.7 + C[j]):
                D[i,j] = np.nan
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Paul Panzer    7 年前

    对于一些人 technical reasons

    >>> idx = np.isnan(A) | (B < 0.3 - C) | (B > 0.7 + C) 
    >>> D[idx] = np.nan
    >>> D
    array([[ 1., nan, nan, nan, nan],
           [nan, nan, nan, nan, nan],
           [nan, nan,  1., nan, nan],
           [nan, nan, nan,  1., nan]])
    

    (B以前)

    >>> B
    array([[0.5363705 , 0.20608309, 0.60937827, 0.94685545, 0.80861546],
           [0.1716229 , 0.89674041, 0.39352757, 0.84573667, 0.87769432],
           [0.97621636, 0.81509133, 0.3808146 , 0.84032838, 0.07871174],
           [0.11719543, 0.38021362, 0.76113843, 0.70157337, 0.66438894]])
    
        2
  •  0
  •   anishtain4    7 年前

    ind=(np.isnan(A)) + (B<0.3-C)*(B>0.7+C)
    D[ind]=np.nan