Python 如何使用线性代数形式的matplotlib绘制直线?

Python 如何使用线性代数形式的matplotlib绘制直线?,python,numpy,matplotlib,Python,Numpy,Matplotlib,这是一个微不足道的问题,但我一次又一次地遇到它,我确信有一个优雅的解决方案,我想使用它 我用numpy做数学,想画出线性代数计算的结果。这些行的形式是 因此,我想将寻找直线起点和终点的工作外包给一组巧妙的python代码,这样我得到的直线就会被绘制到我的3D绘图中,尊重绘图的现有维度。例如,如果我画了一个从x=-2到2,z=-3到3的三维抛物线,我想画一条线 , 它将计算出它需要从-2,1,-2开始,在2,1,2结束 这是怎么回事?首先,定义投影参数很重要。其次,需要使用不同形状的P、v和z,

这是一个微不足道的问题,但我一次又一次地遇到它,我确信有一个优雅的解决方案,我想使用它

我用numpy做数学,想画出线性代数计算的结果。这些行的形式是

因此,我想将寻找直线起点和终点的工作外包给一组巧妙的python代码,这样我得到的直线就会被绘制到我的3D绘图中,尊重绘图的现有维度。例如,如果我画了一个从x=-2到2,z=-3到3的三维抛物线,我想画一条线 , 它将计算出它需要从-2,1,-2开始,在2,1,2结束


这是怎么回事?

首先,定义投影参数很重要。其次,需要使用不同形状的P、v和z,以获得对应于绘图方法坐标的X、Y、z参数:

根据评论 重塑-1,1添加广播所需的。您也可以阅读有关此主题的。它也是重塑3,1的替代品。简单情况下arr1=v;arr2=np。linspace-3,3,11可以这样可视化:

曲线g=1,1,1+z*1,0,1的端点位于z的区间边界,即:


请注意,需要z=1才能获得终点=2,1,2。首先,定义投影参数很重要。其次,需要使用不同形状的P、v和z,以获得对应于绘图方法坐标的X、Y、z参数:

根据评论 重塑-1,1添加广播所需的。您也可以阅读有关此主题的。它也是重塑3,1的替代品。简单情况下arr1=v;arr2=np。linspace-3,3,11可以这样可视化:

曲线g=1,1,1+z*1,0,1的端点位于z的区间边界,即:


请注意,需要z=1才能得到终点=2,1,2

您能解释一下整形-1,1的作用吗?那么-3,3范围呢?这显然是手册,不是主要问题。“但这只是对我们可能处于的范围的粗略猜测,对吗?”安德烈亚斯丘尔德我查看了我的更新。一般来说,你可以解一些方程来找到所需的范围,如我的示例中所示。还有一点要提的是,np.linspace-3,3,2就足够了,因为我们只需要两个点来定义一个线段。你能解释一下整形-1,1的作用吗?那么-3,3范围呢?这显然是手册,不是主要问题。“但这只是对我们可能处于的范围的粗略猜测,对吗?”安德烈亚斯丘尔德我查看了我的更新。一般来说,你可以解一些方程来找到所需的范围,如我的示例中所示。还有一点要提的是,np.linspace-3,3,2就足够了,因为我们只需要两个点来定义一个线段。
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

P = np.array([1,1,1]).reshape(-1,1)
v = np.array([1,0,1]).reshape(-1,1)
z = np.linspace(-3,3,100)
X, Y, Z = P + v*z

ax.plot(X, Y, Z)
plt.show()
g1 = (1, 1, 1) + (-3) * (1, 0, 1) = (-2, 1, -2)
g2 = (1, 1, 1) + 3 * (1, 0, 1) = (4, 1, 4)