【发布时间】:2020-12-26 08:33:10
【问题描述】:
有没有什么方法(比如用于并行处理的 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,3,6,...],...],[[3,9,7,...],[5,8,6...],....],......]
........................#Eg. value_function = [[2,4,6,....],[6,5,7,...],....]
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
【问题讨论】:
-
有点困惑。
state_returns[i,j]始终是一个标量,因此采用.sum()没有任何意义。如果你能更好地解释你想要做什么(现实输入,预期输出),我相信我们可以使用基本广播摆脱循环 -
@PaulH 鉴于 state_returns 的元素具有 dtype = np.ndarray,因此所有元素都是 numpy 数组。此外,包含在 10*10 numpy 数组中的所有这些数组元素可以具有不同的大小(n,)。
-
如果你的数组不乱,你根本不需要循环
-
请提供一个合适的工作示例。您的示例数组不完整。您对
np.zeros的使用是错误的。在尝试“并行处理”之前,请尝试编写有效的 numpy 代码。
标签: arrays numpy for-loop parallel-processing numpy-ndarray