首页 > 解决方案 > Python Linspace 传入函数只返回一个数字

问题描述

有两种情况,第一种,我的函数 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
...]

谢谢!

标签: pythonnumpy

解决方案


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

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

aritmethic 方法的这种广播重载允许以下行为:

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

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

例如,您可以在此处了解有关此主题的更多信息。

如果您想要一个形状为 1000 且包含 10 的数组,请改用numpy.full

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

推荐阅读