代码之家  ›  专栏  ›  技术社区  ›  Marc Bourque

python linspace传入函数只返回一个数字

  •  -2
  • Marc Bourque  · 技术社区  · 7 年前

    有两种情况,第一种情况,我的函数y1返回的总是相同的数字。在这种情况下,它不起作用,y等于10的整数,而不是1000的数组。第二种情况,返回的是不同的数字,它是有效的!

    第一种情况(不按预期工作)

    def Y1(x, N):
        return 10
    
    x= np.linspace(-2,2,1000)
    y= Y1(x,0) #In that case, it should create a array with 1000 numbers, but it only return one int, 10.
    
    y value: 10 #when it should be [10 10 10 10 10 10...]
    

    其他情况(按预期工作)

    def Y1(x, N):
        return x**2
    
    x= np.linspace(-2,2,1000)
    y= Y1(x,0) #it returns a array, all numbers are differents
    
    y value: 
    [4.00000000e+00 3.98400002e+00 3.96803210e+00 3.95209624e+00
     3.93619245e+00 3.92032072e+00 3.90448106e+00 3.88867346e+00
     3.87289792e+00 3.85715445e+00 3.84144304e+00 3.82576370e+00
     3.81011642e+00 3.79450121e+00 3.77891806e+00 3.76336697e+00
    ...]
    

    谢谢您!

    1 回复  |  直到 7 年前
        1
  •  1
  •   dataista    7 年前

    在第一种情况下,返回常量 10 .

    在第二种情况下,您正在应用运算符 **2 到np数组,它重载 ** 并将幂运算元素wise应用于整个数组。这种行为称为广播或矢量化算术运算。

    这种算法方法的广播过载允许如下行为:

    np.array([1, 2, 3, 4]) + 1
    >>> array([2, 3, 4, 5])
    

    这是你的第二个案例使用的,而你的第一个案例没有。

    例如,您可以了解有关此主题的更多信息, here .

    如果你想要一个1000形状的数组,满10秒使用 numpy.full 而是:

    import numpy as np
    y = np.full(1000, 10)