这是我的代码,使用dim=3,但是我希望它可以在任何维度上工作,而不必手动编辑代码
我想能够改变3和20之间的维度最终没有手动广告为循环。
我在看itertools,但不知道如何从itertools.product()
创建的元组中选择正确的值来计算if语句的平方和总和
arrayshape = (width * 2 + 1,) * dim
funcspace = np.zeros(shape=arrayshape, dtype='b')
x1 = list(range(-int(width), int(width + 1)))
x2 = x1
x3 = x1
for i in range(len(x1)):
for j in range(len(x2)):
for k in range(len(x3)):
if round(np.sqrt(x1[i] ** 2 + x2[j] ** 2 + x3[k] ** 2)) in ranges:
funcspace[i][j][k] = 1
您可以在向量的
enumerate
上使用product
,这将产生值和索引:作为奖励,您摆脱了非同音的
range(len())
构造我做了一个更一般的例子,当你有一个向量向量。读起来有点难,因为解包不是在
for
循环中完成的平方和是在1索引(值)上使用
sum
来完成的,如果条件匹配,我们将循环,直到找到“更深层”的列表来将值设置为1
如注释中所述,由于
x1
似乎重复出现,您可以用以下语句替换第一个语句:另一条评论指出,由于
funcspace
是一个numpyndarray
,我们可以通过传递索引列表来简化“set to 1”循环:相关问题 更多 >
编程相关推荐