【发布时间】:2020-08-01 09:53:39
【问题描述】:
我有10个参数,它们的范围是1到10。
我正在尝试为每个参数找到一个多维矩阵(数组),如下所示:
def function123(a,b,c,d,e,f,g,j,i,j):
mat = np.array([a,b,c,d,e,f,g,j,i,j]).reshape(1,10)
return mat * mat.T # 10 by 10 2D matrix
MAT = np.zeros([10,10,10,10,10,10,10,10,10,10]) #output matrix
for a in range(0,10):
for b in range(0,10):
for c in range(0,10):
for d in range(0,10):
for e in range(0,10):
for f in range(0,10):
for g in range(0,10):
for h in range(0,10):
for i in range(0,10):
for j in range(0,10):
MAT[a,b,c,d,e,f,g,j,i,j] = function123(a,b,c,d,e,f,g,j,i,j)
有没有其他干净的方法来解决这个在 python 中疯狂的循环? 我只是不想看到 for 循环。 =[
提前感谢您的帮助!
【问题讨论】:
-
原来的计算要复杂得多,所以我只是将计算部分简化为function123。 =]
-
也许是这个? docs.scipy.org/doc/numpy/reference/generated/numpy.ndindex.html 如果函数足够复杂,则可能没有一种理智的方法来对其进行矢量化(例如,如果它对某个随机 Python 对象进行值查找
-
运行此代码的任何人都应该知道,
MAT(由MAT = np.zeros([10,10,10,10,10,10,10,10,10,10])行创建)需要 80 GB 内存。 -
如果您的函数仅适用于标量值,则您无法对数组创建进行矢量化。您必须为每个数组元素调用一次,全部 10**10 次。重新考虑你想要做什么!
标签: python numpy for-loop multidimensional-array iteration