在大小为n*n python的ndarray中接收到大于x元素的所有索引

2024-10-03 19:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大小为n*n的ndarray(200200)。在

我想找到所有大于0的值的索引,然后将它们更改为1。在

我试着做那样的事,但我得到了例外。在

toggleOn_index = [x for x in  net if x>0]
net[toggleOn_index]=1

最有效的方法是什么?在


Tags: 方法inforindexnetifndarraytoggleon
2条回答

如果我从数组a开始,如下所示

>>> a = np.random.rand(5, 5) - 0.5
>>> a
array([[ 0.24116601, -0.23917393,  0.46607471,  0.08560729,  0.33878893],
       [ 0.24681769, -0.01693847,  0.22579766, -0.38570793, -0.2075437 ],
       [-0.19602781, -0.46108244, -0.40341244,  0.42579818,  0.4655471 ],
       [-0.14669409,  0.36171014, -0.36496558, -0.30983999, -0.06633584],
       [-0.09159042,  0.23346471,  0.37680536, -0.09281205, -0.04552193]])

我可以使用

^{pr2}$

您的方法的问题是x>0将返回一个1D布尔数组:

import numpy as np

net = np.random.random((2, 5))

for i in net:
    print(i > 0)
# [ True  True  True  True  True]
# [ True  True  True  True  True]

但是不能用if来计算这些数组:

^{pr2}$

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()


如前所述,NumPy支持元素级操作,因此您可以简单地使用:

net[net > 0] = 1

如果需要替换值的新数组,可以使用^{}的三参数形式:

newnet = np.where(net > 0, 1, net)

要真正获得索引,可以使用np.where的单参数形式:

indices = np.where(net > 0)
net[indices] = 1               # it can also be used to set the elements to 1.

相关问题 更多 >