【问题标题】:ValueError: Expect x to be a 1-D sorted array_like.I am trying to plot smooth curve but couldn'tValueError: Expect x to be a 1-D sorted array_like.我试图绘制平滑曲线但不能
【发布时间】:2020-07-15 11:55:08
【问题描述】:

我在python中做了一些计算后得到了两个数组。

第一个:

**t**: [0, 1.5e-13, 3e-13, 4.5e-13, 6e-13, 7.499999999999999e-13, 8.999999999999999e-13, 1.05e-12, 1.2e-12, 1.35e-12, 1.4999999999999999e-12, 1.6499999999999998e-12, 3e-13, 4.5e-13, 6e-13, 7.499999999999999e-13, 8.999999999999999e-13, 1.05e-12, 1.2e-12, 1.35e-12, 1.4999999999999999e-12]

第二个:

**X2**: [2.0000000000000003e-34, 3.953299280814115e-14, -0.16661594736661114, 363384313676.0453, 1.6249307273647528e+24, -2.606395610181476e+37, 1.9393976227227167e+50, -1.0229289218046666e+63, 3.6974904635770745e+75, -3.685245806003695e+87, -7.685163462952308e+100, 8.267305810721622e+113, -0.16661594736661114, 363384313676.0453, 1.6249307273647528e+24, -2.606395610181476e+37, 1.9393976227227167e+50, -1.0229289218046666e+63, 3.6974904635770745e+75, -3.685245806003695e+87, -7.685163462952308e+100]

我的代码:

     from matplotlib import pyplot as plt
     from scipy.interpolate import make_interp_spline as sp, BSpline
     x_new = np.linspace(min(t), max(t), 300)
     spl = sp(t, X2, k=3)  
     a_BSpline = sp(t, X2)
     y_new = spl(x_new)

     plt.plot(x_new,y_new)
     plt.show()

我收到错误

ValueError: Expect x to be a 1-D sorted array_like.

【问题讨论】:

    标签: python matplotlib scipy


    【解决方案1】:

    正如ValueError 所说,您需要两个表达式为真:1-Dsorted。对应于:

    if x.ndim != 1 or np.any(x[1:] <= x[:-1]):
             raise ValueError("Expect x to be a 1-D sorted array_like.")
    

    如果你检查这个:

    t = np.array([0, 1.5e-13, 3e-13, 4.5e-13, 6e-13, 7.499999999999999e-13, 8.999999999999999e-13, 1.05e-12, 1.2e-12, 1.35e-12, 1.4999999999999999e-12, 1.6499999999999998e-12, 3e-13, 4.5e-13, 6e-13, 7.499999999999999e-13, 8.999999999999999e-13, 1.05e-12, 1.2e-12, 1.35e-12, 1.4999999999999999e-12])
    
    print(t.ndim)
    print(np.any(t[1:] <= t[:-1]))
    

    输出将是:

    1
    True
    

    这意味着您的数组是一维的,但未排序。

    您的问题是,即使您按np.sort() 对数组进行排序,错误仍然会上升,因为您的数组中的数字是相等的。因此&lt;= 测试仍然是正确的。

    我建议format() 你的号码,这样它们就可以区分了。

    【讨论】:

    • 我尝试了 format(t),如果我错了,请纠正我(对不起,我是 python 新手)..现在我得到一个新错误:UFuncTypeError: ufunc 'multiply' did not contain a loop具有签名匹配类型 (dtype(' dtype('
    • 你应该格式化你的数字,使它们不同(并检查它不是由于数据错误),例如1)向它们添加少量(足以使它们不同,但不足以影响准确性)或 2)删除重复项或 3)对每个不同的重复值运行单独的插值并对产生的两个不同答案进行平均(对有问题的额外工作好处)我看不到如何在这里使用 format() 函数,我认为这是一个错字,应该说 'format' 而不是 'format()'?
    • 在我的例子中,我发现在一个长列表中有很多从低到高的序列。我注意到我需要在每个序列上添加一个额外的过滤器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2020-11-24
    • 2012-06-09
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2017-06-10
    相关资源
    最近更新 更多