Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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_Itertools_Combinatorics_Cartesian Product - Fatal编程技术网

Python中的笛卡尔积

Python中的笛卡尔积,python,itertools,combinatorics,cartesian-product,Python,Itertools,Combinatorics,Cartesian Product,我正试图做一个星条旗问题的散点图。在X轴上,我有“分发糖果给的儿童数量”,在Y轴上,我有“分发糖果的数量”。在Z轴上,我有“多种分配方式” 我使用嵌套for循环生成用于打印的数据集: import itertools as it import math import numpy as np import matplotlib as mlp import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x_coord

我正试图做一个星条旗问题的散点图。在X轴上,我有“分发糖果给的儿童数量”,在Y轴上,我有“分发糖果的数量”。在Z轴上,我有“多种分配方式”

我使用嵌套for循环生成用于打印的数据集:

import itertools as it
import math
import numpy as np
import matplotlib as mlp
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x_coordinate = np.arange(16)
y_coordinate = np.arange(16)
dataset = []
for i in range(10):
    for j in range(10):
    mylist = [item for item in it.product(range(i), repeat = j) if sum(item) == (i-1)]
    z_value = len(mylist) 
    x_value = i
    y_value = j
    dataset.append((x_value, y_value, z_value))  
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
x = [item[0] for item in dataset]
y = [item[1] for item in dataset]
z = [item[2] for item in dataset]
ax.scatter(x,y,z,c='r')
ax.set_xlabel('Candies')
ax.set_ylabel('Children')
ax.set_zlabel('Search space')

问题是,当我检查我的数据集时,我看到像(1,5,1)、(1,6,1)这样的条目等等。这意味着有一种方法可以在5个孩子中分发1颗糖果,或者有一种方法可以在6个孩子中分发1颗糖果。但这不是真的,有5种方法可以在5个孩子中分发1颗糖果,有6种方法可以在6个孩子中分发1颗糖果。我肯定是做错了什么,但我想不出来。

你的
 mylist
computation正在寻找所有方法将
i-1
糖果分发给
j
儿童,而不是
i
糖果。只有一种方法可以在5个儿童、6个儿童或任意数量的儿童之间分发0个糖果:没有人得到任何东西。

然后我还必须编辑我的列表理解。它应该是“mylist=[item for item.product(范围(i+1),重复=j)如果sum(item)=(i-1)],对吗?@azatnurakhmetov:Why
sum(item)=(i-1)
?(还有,为什么不使用?)谢谢,你帮了大忙