Како да направите низ бројева са једнаком размаком

Овај водич ће вас научити како да користите НумПи линспаце() за креирање низа равномерно распоређених бројева у Питхон-у.

Научићете синтаксу функције НумПи линспаце(), праћену примерима који ће вам помоћи да разумете како да га користите.

Напомена: Да бисте пратили овај водич, морате да имате инсталиране Питхон и НумПи.

Још увек немате НумПи? Саставили смо брзи водич за инсталацију за вас.

Почнимо!

Инсталирајте и увезите НумПи

Пре него што започнемо водич, хајде да брзо прођемо кроз кораке за инсталирање НумПи библиотеке.

⏩ Ако већ имате инсталиран НумПи, слободно пређите на следећи одељак.

  • Ако користите Гоогле Цолаб — окружење Јупитер бележнице засновано на облаку, можете да увезете НумПи и одмах почнете да кодирате. (препоручено за овај водич ✅)
  • Ако желите да подесите локално радно окружење, препоручујем вам да инсталирате Анацонда дистрибуцију Питхон-а. Анацонда долази са неколико унапред инсталираних корисних пакета. Можете преузети инсталациони програм за свој оперативни систем. Процес подешавања траје само неколико минута.⌛
  • Ако већ имате инсталиран Питхон на рачунару, још увек можете да инсталирате дистрибуцију Анацонда. Можете користити цонда или пип за инсталирање и управљање пакетима. Можете покренути једну од следећих команди из командне линије Анацонда да бисте инсталирали НумПи.
# Install NumPy using conda
conda install numpy

# Install NumPy using pip
pip install numpy

Као следећи корак, увезите нумпи под псеудонимом нп тако што ћете покренути следећу команду. Ово ће вам помоћи да референцирате НумПи као нп — без потребе да куцате нумпи сваки пут када приступите ставци у модулу.

import numpy as np

Убудуће ћемо користити тачку за приступ свим функцијама у НумПи библиотеци овако: нп.<фунц-наме>.

Случај за равномерно распоређене бројеве

Када радите са НумПи низовима, постоје случајеви када ћете морати да креирате низ равномерно распоређених бројева у интервалу.

Пре него што наставимо даље, хајде да брзо пређемо на другу сличну функцију нп.аранге().

НумПи линспаце() против НумПи аранге()

Ако сте раније користили НумПи, вероватно бисте користили нп.аранге() да креирате низ бројева унутар одређеног опсега.

Знате да нп.аранге(старт, стоп, степ) враћа низ бројева од почетка до, али не укључујући стоп, у корацима корака; подразумевана величина корака је 1.

  Како штампати у Ворд-у да бисте оставили места за бушење рупа

Међутим, вредност корака можда није увек очигледна. Хајде да видимо зашто је то случај.

На пример, ако су вам потребна 4 равномерно распоређена броја између 0 и 1, знате да величина корака мора бити 0,25. Али ако користите нп.аранге(), он не укључује вредност заустављања од 1. Дакле, мораћете да изаберете интервал који прелази вредност заустављања.

Следећа слика илуструје још неколико примера где вам је потребан одређени број равномерно распоређених тачака у интервалу [a, b].

Једнако распоређене тачке у интервалу

Наш први пример 4 равномерно распоређене тачке у [0,1] било довољно лако. Знате да величина корака између тачака треба да буде 0,25.

Претпоставимо да имате мало сложенији пример—где сте морали да наведете 7 равномерно распоређених тачака између 1 и 33. Овде величина корака можда неће одмах бити јасна. Међутим, у овом случају можете ручно израчунати вредност корака.

Међутим, нп.линспаце() је ту да вам то учини још једноставнијим! 😄

Користите НумПи линспаце

Када користите нп.линспаце(), потребно је само да наведете број тачака у интервалу — без бриге о величини корака. И вратићете низ по жељи.

Са овом мотивацијом, хајде да наставимо са учењем синтаксе НумПи линспаце() у следећем одељку.

Синтакса НумПи линспаце()

Синтакса за коришћење НумПи линспаце() је приказана испод:

np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

На почетку, горња синтакса може изгледати веома компликована са многим параметрима.

Међутим, већина њих су опциони параметри, а ми ћемо доћи до много једноставније синтаксе за само неколико минута.

Сада почнимо рашчлањивањем горње синтаксе:

  • старт и стоп су почетна и крајња тачка интервала, респективно. И почетак и заустављање могу бити скалари или низови. У овом водичу ћемо се ограничити на скаларне почетне и крајње вредности.
  • нум је број равномерно распоређених тачака. И то је опциони параметар са подразумеваном вредношћу од 50.
  • крајња тачка је такође опциони параметар који може бити или Тачан или Нетачан.
  • Подразумевана вредност је Тачно, што значи да ће крајња тачка подразумевано бити укључена у интервал. Међутим, можете га поставити на Фалсе да бисте искључили крајњу тачку.
  • ретстеп је још један опциони параметар који узима Булове вредности Тачно или Нетачно. Када је подешено на Тачно, вредност корака се враћа.
  • дтипе је тип података бројева у низу. Тип се обично закључује као флоат и не мора бити експлицитно наведен.
  • акис је још један опциони параметар који означава осу дуж које треба да се чувају бројеви. А ово је релевантно само када су почетне и зауставне вредности сами низови.
  Како да хостујете ФТП сервер на Линуку

▶ Дакле, шта враћа нп.линспаце()?

Враћа Н-димензионални низ равномерно распоређених бројева. А ако је параметар ретстеп постављен на Труе, он такође враћа величину корака.

На основу досадашње дискусије, ево поједностављене синтаксе за коришћење нп.линспаце():

np.linspace(start, stop, num)

Горњи ред кода ће вратити низ равномерно распоређених бројева у интервалу [start, stop].

Сада када знате синтаксу, почнимо са примерима кодирања.

Како направити равномерно распоређене низове помоћу НумПи линспаце()

#1. Као наш први пример, хајде да направимо низ од 20 равномерно распоређених бројева у интервалу [1, 5].

Можете навести вредности старт, стоп и нум као аргументе кључне речи. Ово је приказано у ћелији кода испод:

import numpy as np
arr1 = np.linspace(start = 1,stop = 5,num = 20)
print(arr1)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

Обратите пажњу на то како бројеви у низу почињу са 1 и завршавају са 5—укључујући обе крајње тачке. Такође, посматрајте како су бројеви, укључујући тачке 1 и 5, представљени као флоат у враћеном низу.

#2. У претходном примеру, проследили сте вредности за старт, стоп и нум као аргументе кључне речи. Ако аргументе проследите исправним редоследом, можете их користити и као позиционе аргументе само са вредностима, као што је приказано у наставку.

import numpy as np
arr2 = np.linspace(1,5,20)
print(arr2)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

#3. Хајде сада да направимо још један низ где смо поставили ретстеп на Труе.

То значи да ће функција сада вратити и низ и корак. И можемо их распаковати у две променљиве арр3: низ и степ_сизе: враћену величину корака.

Следећа ћелија кода објашњава како то можете да урадите.

import numpy as np
arr3, step_size = np.linspace(1,5,20,retstep = True)
print(arr3)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

# Output:
print(step_size)
0.21052631578947367

#4. Као последњи пример, поставимо крајњу тачку на Фалсе и проверимо шта се дешава.

import numpy as np
arr4 = np.linspace(1,5,20,endpoint = False)
print(arr4)

# Output:
[1.  1.2 1.4 1.6 1.8 2.  2.2 2.4 2.6 2.8 3.  3.2 3.4 3.6 3.8 
4.  4.2 4.4 4.6 4.8]

У враћеном низу можете видети да је 1 укључено, док 5 није укључено. И последња вредност у низу је 4,8, али још увек имамо 20 бројева.

  Можете ли избрисати једну слику од више на Инстаграму након објављивања?

До сада смо генерисали само низове једнако распоређених бројева. У следећем одељку, хајде да визуализујемо цртањем ових бројева.

Како исцртати равномерно распоређене бројеве у интервалу

У овом одељку, хајде да изаберемо [10,15] као интервал од интереса. Затим користите нп.линспаце() да генеришете два низа, сваки са 8 односно 12 тачака.

Након што се ово заврши, можемо користити функцију цртања из библиотеке матплотлиб да их нацртамо.

Ради јасноће, спојићемо два низа од Н1 = 8 и Н2 = 12 равномерно распоређених тачака на различитим позицијама дуж и-осе.

Следећи исечак кода то демонстрира.

import numpy as np
import matplotlib.pyplot as plt

N1 = 8
N2 = 12

a = 10
b = 15

y1 = np.zeros(N1)
y2 = np.zeros(N2)

x1 = np.linspace(a, b, N1)
x2 = np.linspace(a, b, N2)

plt.plot(x1, y1-0.5, 'o')
plt.plot(x2, y2 + 0.5, 'o')

plt.ylim([-1, 1])

plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]')
plt.xlabel('Interval')

plt.show()

Генерисање равномерно распоређених тачака може бити од помоћи када радите са математичким функцијама. О томе ћемо научити у следећем одељку.

Како користити НумПи линспаце() са математичким функцијама

Након што генеришете низ равномерно распоређених бројева користећи нп.линспаце(), можете израчунати вредности математичких функција у интервалу.

У доњој ћелији кода прво генеришете 50 равномерно распоређених тачака у интервалу од 0 до 2π. А затим креирајте низ и користећи нп.син() на низу к. Имајте на уму да можете прескочити параметар нум, пошто је подразумевана вредност 50. И даље ћемо га експлицитно користити.

Као следећи корак, можете исцртати синусну функцију у интервалу [0, 2π]. Да бисте то урадили, можете користити матплотлиб, као у претходном примеру. Конкретно, функција плот() у матплотлиб.питплот се користи за креирање линијског графикона.

import numpy as np
import matplotlib.pyplot as plt

N = 50

a = 0.0
b = 2*np.pi

x = np.linspace(a, b, N)
y = np.sin(x)

plt.plot(x, y, marker = "o")

plt.ylim([-1, 1])
plt.title(f'y = sin(x)')
plt.xlabel('x ---->')

plt.show()

Сада покрените горњи код тако што ћете Н поставити на 10. Добићете дијаграм као што је приказано на слици испод.

И можете видети да заплет није баш глатки—јер сте изабрали само 10 тачака у интервалу.

Генерално, што је већи број тачака који узмете у обзир, то ће бити глаткији приказ функције.

Закључак

Ево резимеа онога што смо научили.

  • нп.линспаце(старт, стоп, нум) враћа низ бројева равномерно распоређених у интервалу [start, stop].
  • Подесите крајњу тачку опционог параметра на Фалсе да бисте искључили заустављање и подесите интервал на[стартстоп)[startstop)
  • Опционо подесите ретстеп на Труе да бисте добили величину корака.
  • Генеришите равномерно распоређене низове помоћу нп.линспаце(), а затим користите низ са математичким функцијама.

Надам се да сада разумете како функционише нп.линспаце(). Можете изабрати да покренете горње примере у Јупитер бележници. Погледајте наш водич за Јупитер нотебоок или друге Јупитер алтернативе које можете размотрити.

Видимо се ускоро у другом Питхон водичу. До тада, наставите са кодирањем!😀