import numpy as np #obvious solution #(nicer version of:) #[[ 0.95911082 0.27747321 0.0558132 ] # [-0.14426784 0.64893967 -0.74703693]] #(maybe) #[[ 0.97660659 0.20377678 0.06866321] # [-0.09744323 0.70403038 -0.70345294]] #saw one (but did not copy) that looked like #[[ 1.0, 0.0, 0.0], # [ 0.0, 0.7,-0.7]] #but there is a secondary solution #[[ 0.34055104 0.35392664 -0.87106881] # [-0.64936382 0.75853476 0.0543288 ]] #x,x**2+y+z,z #translated into #a=x+x**2+y+z-2.5*z #b=x**2+y+z-(13/15)*x #find a(b) #a-const*b=const #x-(13/15)*x #+(x**2+y+z)-(x**2+y+z) #-2.5*z #=2x/15-2.5z #not great, but... #tertiary solution #[[ 0.86908816 0.3797459 -0.31698411] # [-0.49261647 0.60629139 -0.62429142]] #which looks like a mirrored version of #[[ 0.93229881 -0.19299482 0.30589537] # [ 0.3481528 0.70805987 -0.61436217]] #which of course makes some sense def data(n=1000): """ Generate 3d data, where a and b have a relation, but x=x(a,b), y=y(a,b), z=z(a,b) will be returned """ a=np.random.uniform(-1.0,1.0,n) b=a**2+np.random.uniform(-0.2,0.2,n) c=np.random.uniform(-1.0,1.0,n) x=a y=b+c z=c return x,y,z if __name__ == '__main__': x,y,z=data() from plt import plt plt.plot(x,y,'.') plt.show() #print(x,y,z)