传递函数的Python Linspace仅返回一个数字

时间:2018-11-20 23:17:27

标签: python numpy

有两种情况,第一种,我的函数Y1总是返回相同的数字。在那种情况下,它不起作用,y等于10的整数而不是一千个10的数组。第二种情况是,它返回差值数字,它可以工作!

第一种情况(无法正常工作)

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 个答案:

答案 0 :(得分:1)

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

在第二种情况下,您将运算符**2应用于np数组,该数组使**重载并将幂运算逐个元素地应用于整个数组。这种行为被称为广播或矢量化的方法。

这种广播的超负荷方法允许以下行为:

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)