【发布时间】:2019-04-20 00:37:29
【问题描述】:
我正在尝试绘制“星条形”问题的散点图。在 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 个糖果,或者1 种方法在 6 个孩子中分配 1 个糖果。但这不是真的,有 5 种方法可以将 1 颗糖果分配给 5 个孩子,而 6 种方法可以将 1 颗糖果分配给 6 个孩子。我当然在这里做错了什么,但我想不通。
【问题讨论】:
标签: python itertools combinatorics cartesian-product