Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 测试是否可以从数组中创建幻方_Python_Numpy_Permutation_Sympy_Magic Square - Fatal编程技术网

Python 测试是否可以从数组中创建幻方

Python 测试是否可以从数组中创建幻方,python,numpy,permutation,sympy,magic-square,Python,Numpy,Permutation,Sympy,Magic Square,我正在尝试编写一个程序,检查是否可以从数组中创建幻方。我必须使用的数组包含64个元素(这将导致8x8幻方) 这给我留下了一个非常明显的问题,就是必须检查64!不同的排列 幻方当然有某些属性。如果它是幻方,则可以旋转或反射它,而不会使矩阵失去其“幻方”属性。 所以,如果我检查了矩阵,就没有必要检查它的旋转或反射版本。这可以减少可能的排列数量,但需要一种方法来分类某些排列 也许有人有个好主意,我可以加快我的程序,这样就不用花很长时间。这更像是一个数学问题。你能否做任何需要反复试验的事情是值得怀疑的。

我正在尝试编写一个程序,检查是否可以从数组中创建幻方。我必须使用的数组包含64个元素(这将导致8x8幻方)

这给我留下了一个非常明显的问题,就是必须检查64!不同的排列

幻方当然有某些属性。如果它是幻方,则可以旋转或反射它,而不会使矩阵失去其“幻方”属性。 所以,如果我检查了矩阵,就没有必要检查它的旋转或反射版本。这可以减少可能的排列数量,但需要一种方法来分类某些排列


也许有人有个好主意,我可以加快我的程序,这样就不用花很长时间。

这更像是一个数学问题。你能否做任何需要反复试验的事情是值得怀疑的。相反,您需要关于64个数字的序列必须具备哪些条件才能形成这样一个正方形的充要条件。很容易找到必要条件(例如,所有元素的和都需要被8整除——假设我们讨论的是正整数),但充分条件更难找到。当然,这是一个经过研究的问题,所以你可以看看大家都知道些什么。@johncolman你的观点可能是对的。问题是,我发现的一切基本上都是基于这样的假设,即nxn大小的魔法包含数字1…n^2。看来我必须继续寻找合适的纸张/网站来讨论这些属性。一个重要的问题是数组中的64个数字是不同的还是可以有重复的元素。对于完全任意的情况,确定n^2个数字的集合是否可以排列成nxn(广义)幻方可能是NP困难的。它似乎涉及到诸如箱子包装之类的事情(每一行都是一个容量为神奇常数的箱子),但有额外的限制。它似乎还涉及到子集和问题。mathworld有一个关于幻方的页面
from sympy.utilities.iterables import multiset_permutations
import numpy as np

def test_if_magic_square(input_matrix):
    # do test here to check if this is a magic square. Returns True or False


if __name__ == '__main__':
    long_array=np.array([...........])
    for p in multiset_permutations(long_array):
        result = test_if_magic_square(p)
        if result:
            print(p)