我有一個二維陣列,我想將 0 反轉為 1,反之亦然,但僅限于第一行。
我在下面有一個關于如何執行此操作的示例,但它會影響整個 ndarray。
np.where((a==0)|(a==1), a^1, a)
For example:
a = np.array([[0,1,0,1], [1,0,0,1]])
print(a)
array([[0, 1, 0, 1],
[1, 0, 0, 1]])
np.where((a==0)|(a==1), a^1, a)
輸入:
array([[0, 1, 0, 1],
[1, 0, 0, 1]])
電流輸出:
array([[1, 0, 1, 0],
[0, 1, 1, 0]])
期望的輸出:
array([[1, 0, 1, 0],
[1, 0, 0, 1]])
謝謝。
uj5u.com熱心網友回復:
只需使用:
In [1753]: a[0] = 1 - a[0]
In [1754]: a
Out[1754]:
array([[1, 0, 1, 0],
[1, 0, 0, 1]])
或者
In [1738]: a[0] = np.where((a==0)|(a==1), a^1, a)[0]
In [1739]: a
Out[1739]:
array([[1, 0, 1, 0],
[1, 0, 0, 1]])
或使用np.logical_not:
In [1744]: a[0] = np.logical_not(a[0]).astype(int)
In [1745]: a
Out[1745]:
array([[1, 0, 1, 0],
[1, 0, 0, 1]])
uj5u.com熱心網友回復:
如果可能,建議使用 NumPy 索引,而不是其他模塊,例如np.where:
mask_0 = a[0] == 0
# [ True False True False]
mask_1 = a[0] == 1
# [False True False True]
a[0, mask_0] = 1
# [[1 1 1 1]
# [1 0 0 1]]
a[0, mask_1] = 0
# [[1 0 1 0]
# [1 0 0 1]]
如果您在陣列中只有0and (除了非常易于使用的porwal asnwer ie ),您可以基于它轉換為布爾陣列:1a[0] = 1 - a[0]
bool_a = a[0].astype(bool)
# [False True False True]
res = ~bool_a # inverted
# [ True False True False]
res.astype(int)
# [1 0 1 0]
a[0] = res.astype(int)
# [[1 0 1 0]
# [1 0 0 1]]
可以寫成一行:
a[0] = (~a[0].astype(bool)).astype(int)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497810.html
