Python 如何使用numpy实现更优雅的循环?
这是我的一些代码片段。有合适的人选吗 这样做的方法。一些花式的小把戏Python 如何使用numpy实现更优雅的循环?,python,python-3.x,numpy,Python,Python 3.x,Numpy,这是我的一些代码片段。有合适的人选吗 这样做的方法。一些花式的小把戏 q_val = np.random.rand(5,3) action = np.ones((5,1),int) to_set = np.ones((5,1),int) for x in range(5): q_val[x][action[x]] -= to_set[x] 这就是我实例化这些值的方式 q_val = np.random.rand(5,3) //lets say the middel of rand
q_val = np.random.rand(5,3)
action = np.ones((5,1),int)
to_set = np.ones((5,1),int)
for x in range(5):
q_val[x][action[x]] -= to_set[x]
这就是我实例化这些值的方式
q_val = np.random.rand(5,3) //lets say the middel of randome
q_val = array([[0.93373647, 0. , 0.14962181],//get only zeroes
[0.67909199, 0. , 0.07462584],
[0.05696713, 0. , 0.03221326],
[0.78209394, 0. , 0.58312439],
[0.09217555, 0. , 0.17876316]])
action = np.ones((5,1),int)
action = >>> action
array([[1],
[1],
[1],
[1],
[1]])
to_set = np.ones((5,1),int)
to_set = array([[1],
[1],
[1],
[1],
[1]])
这就是我要改变的
for x in range(5):
q_val[x][action[x]] -= to_set[x]
这就是我将得到的
array([[ 0.93373647, -1. , 0.14962181],
[ 0.67909199, -1. , 0.07462584],
[ 0.05696713, -1. , 0.03221326],
[ 0.78209394, -1. , 0.58312439],
[ 0.09217555, -1. , 0.17876316]])
我相信有一些奇特的方法可以做到这一点。
有人能帮忙吗?您可以使用数组为其他数组编制索引:
index = np.arange(len(action))
q_val[index, action] -= to_set[index]
很容易,这可以改写为:
q_val[:,1] -= 1
一行的结果是
q_val[:,action] -= to_set
我投票结束这篇文章,因为它不太可能让未来的读者受益。