首页 > 解决方案 > 离散单纯形并使用色调在 3D 绘图处绘图

问题描述

我有一个函数,它接受 4 个输入(S、E、I、R)并返回(0、1、2)中的三个值之一。但是,S+E+I+R=N,其中 N 是常数。我尝试了以下方法:

def dummy(S,E,I,R):
    if S+E<500:
        return 0
    elif I+R >600:
        return 1
    else:
        return 2

N = 1e5
States = []
Cateogory = []
S = np.arange(0.0, N, 1000.)
for s in S:
    E = np.arange(0.0, N-s, 1000)
    if not E.shape[0]>0:
        E=np.arange(0.0, 1., 1000.)
    for e in E:
        I = np.arange(0.0, N-s-e, 1000)
        if not I.shape[0]>0:
            I=np.arange(0.0, 1., 1000.)
        for i in I:
            states.append([s,e,i,N-s-e-i])
            Cateogory.append(dummy(s,e,i,N-s-e-i))

但是它花费了太多时间来生成数据。有没有最佳的方法来做到这一点?在此之后,我打算按照这篇文章制作一个 3D 情节。

标签: pythonmatplotlibplotlyseaborn

解决方案


您可以使用两种方式加快速度:

  1. 多处理工具箱
  2. 使用来自 itertool 的排列(如下所示)from itertools import permutations

从 itertools 导入排列

def random_uniform_state():
    popu=1e5
    S = np.random.uniform(low=0.0, high=popu)
    E = np.random.uniform(low=0.0, high=popu-S)
    I = np.random.uniform(low=0.0, high=popu-(S+E))
    R = popu-(S+E+I)
    state = [S,E,I,R]
    perms = permutations([S,E,I,R])
    states = []
    for state in perms:
        states.append(state)
    return states

推荐阅读