2024-10-03 19:31:26 发布
网友
我有一个大小为n*n的ndarray(200200)。在
ndarray
我想找到所有大于0的值的索引,然后将它们更改为1。在
我试着做那样的事,但我得到了例外。在
toggleOn_index = [x for x in net if x>0] net[toggleOn_index]=1
最有效的方法是什么?在
如果我从数组a开始,如下所示
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]])
我可以使用
您的方法的问题是x>0将返回一个1D布尔数组:
x>0
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来计算这些数组:
if
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的单参数形式:
np.where
indices = np.where(net > 0) net[indices] = 1 # it can also be used to set the elements to 1.
如果我从数组
a
开始,如下所示我可以使用
^{pr2}$您的方法的问题是
x>0
将返回一个1D布尔数组:但是不能用
^{pr2}$if
来计算这些数组:如前所述,NumPy支持元素级操作,因此您可以简单地使用:
如果需要替换值的新数组,可以使用^{} 的三参数形式:
要真正获得索引,可以使用
np.where
的单参数形式:相关问题 更多 >
编程相关推荐