Определение функции с помощью цикла для numpy.linspace - PullRequest
0 голосов
/ 25 октября 2018

Я новичок в программировании, я использую python 3.0

Мне дана функция h (x) = 1, если 0.1 <= x <= 0.3, или = 0 в противном случае </p>

У меня есть

L = 1
N=200    
x = numpy.linspace(0,L,N)

Я хочу определить функцию для h (x), которая перебирает значения x и возвращает 1 или 0 на основе условий, указанных выше

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете использовать np.logical_and и astype:

np.logical_and(x >= 0.1, x <= 0.3).astype(int)

График, показывающий поведение:

enter image description here

0 голосов
/ 25 октября 2018

Вы можете использовать понимание списка следующим образом.Это в основном использует комбинацию цикла for, оператора if-else в одной строке.Здесь вы используете условие if, чтобы проверить, находится ли x между 0,1 и 0,3, и сохраняет 1 в hx, иначе 0.

import numpy
import matplotlib.pyplot as plt
L = 1
N=200    
x = numpy.linspace(0,L,N)
hx = [1 if 0.1 <= i <= 0.3 else 0 for i in x] # list comprehension
plt.plot(x, hx)
plt.xlabel('x', fontsize=18)
plt.ylabel('h(x)', fontsize=18)

Альтернативный векторизованный подход : Здесь(x>=0.1) & (x<=0.3) возвращает индексы, где x удовлетворяет условиям, и для этих индексов оцените hx в 1. Здесь вы инициализируете hx всеми нулями.

hx = numpy.zeros(N)
hx[(x>=0.1) & (x<=0.3)] = 1

Используя его какфункция

def get_hx(x):
    # hx = numpy.zeros(N)
    # hx[(x>=0.1) & (x<=0.3)] = 1
    hx = [1 if 0.1 <= i <= 0.3 else 0 for i in x]
    return hx

hx = get_hx(x)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...