使用numpy在ndarray中找到n个n的每个实例的索引

发布于 2025-02-11 22:28:25 字数 539 浏览 0 评论 0原文

我有一个2D数组,我想倒入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]])

谢谢。

I have an 2d array, and I'd like to invert 0 to 1 and vice versa, but only on the first row.

I have an example below on how to do it, but it affects the entire 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)

Input:

array([[0, 1, 0, 1],
       [1, 0, 0, 1]])

Current output:

array([[1, 0, 1, 0],
       [0, 1, 1, 0]])

Desired output:

array([[1, 0, 1, 0],
       [1, 0, 0, 1]])

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

从此见与不见 2025-02-18 22:28:25

只需使用:

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]])

Simply Use:

In [1753]: a[0] = 1 - a[0]

In [1754]: a
Out[1754]: 
array([[1, 0, 1, 0],
       [1, 0, 0, 1]])

OR

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]])

OR use 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]])
森林散布 2025-02-18 22:28:25

可能

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]]

如果 (除了 porwal asnwer 这很容易使用ie a [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)

It is recommended to use indexing by NumPy if possible, not other modules like 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]]

if you have just 0 and 1 in the array (besides the porwal asnwer that is very easy to use i.e. a[0] = 1 - a[0]) you can convert to Boolean array based on that as:

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]]

that can be written in one line as:

a[0] = (~a[0].astype(bool)).astype(int)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文