我有一个大小为 n*n (200,200) 的 ndarray
。
我想要找到所有大于0的值的索引,然后将它们改为1。
我尝试做了一些类似的操作,但是遇到了异常。
toggleOn_index = [x for x in net if x>0]
net[toggleOn_index]=1
什么是最有效的方法来做到这一点?
我有一个大小为 n*n (200,200) 的 ndarray
。
我想要找到所有大于0的值的索引,然后将它们改为1。
我尝试做了一些类似的操作,但是遇到了异常。
toggleOn_index = [x for x in net if x>0]
net[toggleOn_index]=1
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]])
我可以使用以下方式将所有大于0
的元素分配:
>>> a[a > 0] = 1
>>> a
array([[ 1. , -0.23917393, 1. , 1. , 1. ],
[ 1. , -0.01693847, 1. , -0.38570793, -0.2075437 ],
[-0.19602781, -0.46108244, -0.40341244, 1. , 1. ],
[-0.14669409, 1. , -0.36496558, -0.30983999, -0.06633584],
[-0.09159042, 1. , 1. , -0.09281205, -0.04552193]])
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 np.array([True, True, True, True, True]):
pass
数值错误:具有多个元素的数组的真实值是模糊的。请使用 a.any() 或 a.all()
正如前面提到的,NumPy支持逐元素操作,所以您可以简单地使用:
net[net > 0] = 1
如果您想要一个替换了值的新数组,可以使用带有三个参数的np.where
形式:
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.