numpy:使用OR将多个分配转换为单个分配

时间:2018-10-08 13:31:23

标签: python arrays numpy indexing numpy-ndarray

taxi_modified是二维ndarray。

下面的代码可以工作,但是看起来不是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的col为2、3, 5,则需要为索引15的col分配1。

以下内容无效:

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

1 个答案:

答案 0 :(得分:2)

您可以在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