Передача Python Linspace в функцию возвращает только одно число - PullRequest
0 голосов
/ 21 ноября 2018

Есть два случая, первый, моя функция 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 голосов
/ 21 ноября 2018

В первом случае вы возвращаете постоянную 10.

Во втором случае вы применяете оператор **2 к массиву np, который перегружает ** и применяет питаниеоперация поэлементно до полного массива.Такое поведение известно как широковещательная или векторизованная арифметическая операция.

Эта широковещательная перегрузка методов арифметики допускает следующие поведения:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...