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

numpy:使用或将多个指定转换为单个指定

  •  1
  • zerohedge  · 技术社区  · 6 年前

    taxi_modified 是一个二维数组。

    下面的代码是有效的,但似乎不符合python:

    taxi_modified[taxi_modified[:, 5] == 2, 15] = 1
    taxi_modified[taxi_modified[:, 5] == 3, 15] = 1
    taxi_modified[taxi_modified[:, 5] == 5, 15] = 1
    

    如果索引5处的列为2,3, 5.

    以下操作无效:

    taxi_modified[taxi_modified[:, 5] == 2 | 3 | 5, 15] = 1
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   jpp    6 年前

    np.isin (NumPy v1.13+),或 np.in1d 对于旧版本。

    下面是一个演示:

    # example input array
    A = np.arange(16).reshape((4, 4))
    
    # calculate Boolean mask for rows
    mask = np.isin(A[:, 1], [1, 5, 13])
    
    # assign values, converting mask to integers
    A[np.where(mask), 2] = -1
    
    print(A)
    
    array([[ 0,  1, -1,  3],
           [ 4,  5, -1,  7],
           [ 8,  9, 10, 11],
           [12, 13, -1, 15]])
    

    A[np.where(np.isin(A[:, 1], [1, 5, 13])), 2] = -1