如何解决删除for循环以启用numpy数组的并行计算
有什么办法(例如对numpy数组进行矢量化以进行并行处理)来删除两个for循环并使代码并行化吗?
state_returns = np.zeros((10,10,dtype = np.ndarray))
value_function = np.zeros((10,10))
........................#further code to fill the values in array:state_returns
........................#Eg. state_returns = [[[1,2,3,..],[2,6,...],[[3,9,7,[5,8,6...],....],......]
........................#Eg. value_function = [[2,4,[6,5,....]
for i in range(10):
for j in range(10):
n = state_returns[i,j].shape[0]-1
value_function[i,j] = state_returns[i,j].sum()/n if (n!=0) else 0
解决方法
如果我是对的,那么您的计算是按元素进行的。也就是说,value_function[i,j]
和value_function[n,m]
的值i != n
对j != m
没有影响。这意味着您可以轻松地并行运行代码。这是一个使用线程库和10个线程的示例(我实际上没有检查代码是否有效,但希望您能理解):
import threading
def calculation(i):
global state_returns,value_function
for j in range(10):
n = state_returns[i,j].shape[0]-1
value_function[i,j] = state_returns[i,j].sum()/n if (n!=0) else 0
if __name__ == '__main__':
t = []
for i in range(0,10):
t.append(threading.Thread(target=calculation,args=(i,)))
for i in range(0,10):
t[i].start()
for i in range(0,10):
t[i].join()
如果遇到问题,您可能需要锁定def中的变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。