Graph 我认为应该是一个简单的情节

Graph 我认为应该是一个简单的情节,graph,matplotlib,Graph,Matplotlib,所以基本上我想画一个x轴上有n,y轴上有r的图 对于n=1,它有r=1,n=2,它有r=2,n=3,它有r=4,n=4,它有8。,然后我计划扩展它 我试过这个: import scipy import scipy.linalg import numpy as np from matplotlib import pyplot as plt for n in range(1,5): A=np.identity(n) for i in range(0,n): for

所以基本上我想画一个x轴上有n,y轴上有r的图

对于n=1,它有r=1,n=2,它有r=2,n=3,它有r=4,n=4,它有8。,然后我计划扩展它

我试过这个:

import scipy
import scipy.linalg
import numpy as np
from matplotlib import pyplot as plt


for n in range(1,5):
    A=np.identity(n)
    for i in range(0,n):
        for j in range(0,i):
            A[i,j]=-1
    A[:,n-1]=1
    x=np.random.randn(n,1)
    b=A*x
    P, L, U = scipy.linalg.lu(A)
    print A
    r=U.max()/A.max()
    print r
    print n
    plt.plot(n,r)
    plt.show()
但它只绘制n的最大值与r的对应值,而不是n的所有值。不知道我做错了什么


提前感谢

您首先需要创建要打印的阵列,然后再打印它

rr, nn = [], []
for n in range(1,5):
    A=np.identity(n)
    for i in range(0,n):
        for j in range(0,i):
            A[i,j]=-1
    A[:,n-1]=1
    x=np.random.randn(n,1)
    b=A*x
    P, L, U = scipy.linalg.lu(A)
    print A
    r=U.max()/A.max()
    print r
    print n
    rr.append(r)
    nn.append(n)

plt.plot(nn,rr)
plt.show()
这样做会创建一个新的绘图,每个循环有一个点

此外,如果您计划增加
n
,我建议检查更有效的循环方式(例如列表理解或)

plt.plot()
可以绘制线条和标记。默认情况下,它将仅打印线。您只给出一个点,因此无法绘制直线,也无法绘制标记。要打开标记,请设置属性
marker=“o”
plt.plot(x,y,markers=“o”)
。 如果你想要一个直线图,你必须列出
n
r
并绘制它们。 对于带有标记的列表:


另外,您可能希望将
plt.show()
从for循环中去掉。它会为每次迭代生成一个更新的图,我不确定您是否想要它。

我不确定这是否是您想要的(阅读您的描述,我认为是这样,但查看您的代码,您似乎正在尝试做一些更困难的事情)

如果你真的想得到序列
1,2,4,8,16,
,我建议你在一次操作中处理整个数组,而不是使用for循环。对于大型阵列,它更具表现力,速度更快

无论如何:

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> 
>>> n = np.arange(5)
>>> r = 2 ** n
>>> r
array([ 1,  2,  4,  8, 16])
>>> plt.plot(n, r, 'ob')
[<matplotlib.lines.Line2D object at 0x102d8ee10>]
>>> plt.show()
>>将matplotlib.pyplot作为plt导入
>>>将numpy作为np导入
>>> 
>>>n=np.arange(5)
>>>r=2**n
>>>r
数组([1,2,4,8,16])
>>>平面图(n、r、ob)
[]
>>>plt.show()

n
r
代表什么?也就是说,图的意思是什么?n是矩阵A的维数(因此U),然后r是U的max元素与A的max元素的比值,我想表明,随着维数(n)的增加,这个比值(r)呈指数增长。所以我想画一系列的r,谢谢!非常感谢!