numpy:使用 OR 将多个赋值转换为单个赋值
numpy: convert multiple assignments to a single one using OR
taxi_modified
是一个二维的ndarray。
下面的代码有效,但似乎不是 pythonic:
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,则需要将 1 分配给索引 15 处的列。
以下无效:
taxi_modified[taxi_modified[:, 5] == 2 | 3 | 5, 15] = 1
对于旧版本,您可以使用 np.isin
(NumPy v1.13+), or 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
taxi_modified
是一个二维的ndarray。
下面的代码有效,但似乎不是 pythonic:
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,则需要将 1 分配给索引 15 处的列。
以下无效:
taxi_modified[taxi_modified[:, 5] == 2 | 3 | 5, 15] = 1
对于旧版本,您可以使用 np.isin
(NumPy v1.13+), or 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