Чтобы найти квадратный корень из списка чисел, вы можете использовать функцию numpy.sqrt() в Python.
Функция sqrt() принимает массив (или список) numpy, вычисляет квадратный корень из элементов в списке и возвращает массив с результатом.
Синтаксис
Синтаксис функции:
output = numpy.sqrt([array_like])
Предоставьте sqrt() массив, подобный аргументу, и он вернет ndarray.
Пример 1: из списка чисел
В этом примере мы инициализируем список чисел и найдем квадратный корень из этих чисел.
import numpy as np #initialize a list listA = [4, 16, 9, 1, 25, 49] #find square root of items in the list output = np.sqrt(listA) print(output)
Вывод:
[2. 4. 3. 1. 5. 7.]
Мы предоставили точные квадраты в списке, следовательно, мы получили их квадратные корни без десятичного значения.
Пример 2
В этой программе мы предоставим числа, не являющиеся точными квадратами, и найдем их квадратный корень.
import numpy as np #initialize a list listA = [2, 3, 5] #find square root of items in the list output = np.sqrt(listA) print(output)
Вывод:
[1.41421356 1.73205081 2.23606798]
Пример 3: нахождение из комплексных чисел
Вы также можете предоставить комплексные числа в качестве элементов списка для вычисления их квадратных корней.
import numpy as np #initialize a list listA = [4+1j, 9+16j] #find square root of items in the list output = np.sqrt(listA) print(output)
Вывод:
[2.01532946+0.24809839j 3.69848346+2.16304875j]
Пример 4: из отрицательных чисел
В этом примере мы предоставим некоторые отрицательные числа, sqrt() выдает RuntimeWarning – просто предупреждение. И возвращает nan (не число) для отрицательного элемента в списке.
import numpy as np #initialize a list listA = [-4, 9] #find square root of items in the list output = np.sqrt(listA) print(output)
Вывод:
[nan 3.]
This div height required for enabling the sticky sidebar
Hawaiian pilot 3 / 3 / 0 Регистрация: 18.05.2021 Сообщений: 93 |
||||
1 |
||||
Нахождения квадратного корня каждого числа из списка30.09.2021, 19:22. Показов 6226. Ответов 16 Метки math, sqrt (Все метки)
Помогите пожалуйста понять и исправить ошибку.
0 |
Val Rubis 305 / 186 / 97 Регистрация: 01.05.2014 Сообщений: 517 |
||||||||
30.09.2021, 20:06 |
2 |
|||||||
Корень извлекается из числа, а у вас список:
Добавлено через 11 минут
0 |
4075 / 2487 / 525 Регистрация: 07.11.2019 Сообщений: 4,131 |
|
30.09.2021, 21:05 |
3 |
Hawaiian pilot, вот и спросите себя, ЗАЧЕМ??? вы написали в 7 строке три буквы s, t и r???
0 |
eaa Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
||||
30.09.2021, 21:05 |
4 |
|||
2 |
3 / 3 / 0 Регистрация: 18.05.2021 Сообщений: 93 |
|
30.09.2021, 21:34 [ТС] |
5 |
Корень извлекается из числа, а у вас список: это я вижу.
0 |
1182 / 758 / 277 Регистрация: 05.09.2021 Сообщений: 1,772 |
|
30.09.2021, 21:39 |
6 |
Hawaiian pilot, это магия. Добавлено через 3 минуты
1 |
3 / 3 / 0 Регистрация: 18.05.2021 Сообщений: 93 |
|
30.09.2021, 21:40 [ТС] |
7 |
а, поняла, распаковка.
0 |
enx 1182 / 758 / 277 Регистрация: 05.09.2021 Сообщений: 1,772 |
||||
30.09.2021, 21:45 |
8 |
|||
Сообщение было отмечено Hawaiian pilot как решение РешениеHawaiian pilot, и опять через def? зачем…. Добавлено через 3 минуты
1 |
Hawaiian pilot 3 / 3 / 0 Регистрация: 18.05.2021 Сообщений: 93 |
||||
30.09.2021, 21:47 [ТС] |
9 |
|||
enx, задачи по def
0 |
4075 / 2487 / 525 Регистрация: 07.11.2019 Сообщений: 4,131 |
|
30.09.2021, 21:53 |
10 |
Hawaiian pilot, потому что методом тыка вы никогда ничему толком не научитесь. Вы не знаете для чего отступы и что return без def не бывает. Почитайте учебник, разберите примеры.
0 |
1182 / 758 / 277 Регистрация: 05.09.2021 Сообщений: 1,772 |
|
30.09.2021, 21:57 |
11 |
Hawaiian pilot, бросьте эти задачи, и этот учебник вот прямо сейчас, с разбегу и в костер. Кинул вам вчера ссылки, пройдите по ним.
0 |
3 / 3 / 0 Регистрация: 18.05.2021 Сообщений: 93 |
|
30.09.2021, 22:02 [ТС] |
12 |
return без def не бывает бывает
0 |
Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
|
01.10.2021, 06:07 |
13 |
Hawaiian pilot, это похвально. только видео не все хороши. читайте книги.
0 |
Модератор 35427 / 19452 / 4071 Регистрация: 12.02.2012 Сообщений: 32,486 Записей в блоге: 13 |
|
01.10.2021, 07:39 |
14 |
Val Rubis, ваш код не сработал тоже( — да неужели? А у меня сработал…
0 |
3 / 3 / 0 Регистрация: 18.05.2021 Сообщений: 93 |
|
01.10.2021, 12:26 [ТС] |
15 |
— да неужели? А у меня сработал… охотно верю )
0 |
1182 / 758 / 277 Регистрация: 05.09.2021 Сообщений: 1,772 |
|
01.10.2021, 12:28 |
16 |
а надеть не пробовал? вот это крайне не честно и не справедливо в высказываниях, вам предложили 100500 вариантов по цене 0 рублей.
0 |
3 / 3 / 0 Регистрация: 18.05.2021 Сообщений: 93 |
|
01.10.2021, 12:45 [ТС] |
17 |
enx, это же самоирония) всем очень благодарна, люди помогают реально бесплатно и без корысти.
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
01.10.2021, 12:45 |
17 |
Скачать пример рабочей книги
Загрузите образец книги
Из этого туториала Вы узнаете, как вычислять квадратные корни в Excel и Google Таблицах.
Квадратный корень с использованием функции SQRT
Один из способов найти квадратный корень из числа — использовать функцию КОРЕНЬ. Его синтаксис:
Чтобы найти квадратный корень из списка чисел, перетащите формулу вниз, как показано в примере.
Квадратный корень с использованием экспонентного оператора
Другой способ найти квадратный корень из числа — использовать оператор экспоненты (^) с 1/2 в качестве экспоненты.
Давайте найдем квадратный корень из числа, используя оператор экспоненты для того же примера.
Примечание. Убедитесь, что экспонента «1/2» заключена в круглые скобки, чтобы контролировать порядок операций.
Квадратный корень с использованием функции POWER
Функция СТЕПЕНЬ возвращает значение заданного числа в степени. Его синтаксис:
Давайте найдем квадратный корень из числа, используя функцию СТЕПЕНЬ для того же примера.
Квадратный корень отрицательного числа с использованием функции ABS
Функция ABS, которая возвращает абсолютное значение для любого отрицательного числа, может быть вложена в любую из трех функций, описанных выше (функция КОРЕНЬ, оператор экспоненты и функция СТЕПЕНЬ), чтобы найти квадратный корень из отрицательного числа. Его синтаксис:
Давайте найдем квадратный корень из списка отрицательных чисел, используя функцию ABS, вложенную в функцию SQRT.
Функцию ABS можно использовать аналогичным образом для двух других функций (оператора экспоненты и функции СТЕПЕНЬ).
Примечание. Excel возвращает # ЧИСЛО! ошибка, если функция ABS не используется для вычисления квадратного корня из отрицательного числа.
Примечание 2: вместо квадрата числа используйте 2 вместо 1/2.
Эти формулы работают в Google Таблицах точно так же, как и в Excel.
Вы поможете развитию сайта, поделившись страницей с друзьями
Решение в лоб — используем банальную проверку
int a;
std::cin >> a;
int r = (int)sqrt(a);
if (r*r == a) {
std::cout << a;
}
Конечно, этот способ будет медленный. Но его можно ускорить, используя трюк. Известно, что квадрат любого натурального числа не может заканчиваться 2, 3, 7 и 8. Если числа приходят равномерно, то это сразу отсечет 40% чисел. Если использовать две последние цифры, то можно отсечь 78%. (для 4 последних цифр будет отсекаться 89 процентов, но нужно ли это?)
поэтому код чуточку улучшим.
while (пока есть что читать) {
int a;
std::cin >> a;
int d = a % 10;
if (d == 2 || d == 3 || d == 7 || d == 8)
continue;
int r = (int)sqrt(a);
if (r*r == a) {
std::cout << a;
}
}
Для того, то бы использовать это в if, заворачиваем в функцию
bool isSqrt(int a)
{
int d = a % 10;
if (d == 2 || d == 3 || d == 7 || d == 8)
return false;
int r = (int)sqrt(a);
return (r*r == a)
}
Ну и не забываем добавить в include файл cmath
upd
если чисел много, и захочется чуточку ускориться, то вот возможные двухцифровые концовки для квадратов чисел
[0, 1, 4, 9, 16, 21, 24, 25, 29, 36, 41, 44, 49, 56, 61, 64, 69, 76, 81, 84, 89, 96]
но использовать лучше это в таком виде
int data[100] = {1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0};
if (data[a % 100] != 1)
continue;
Каждый узел однонаправленного (односвязного) линейного списка (ОЛС) содержит одно поле указателя на следующий узел. Поле указателя последнего узла содержит нулевое значение (указывает на NULL).
Узел ОЛС можно представить в виде структуры
struct list
{
int field; // поле данных
struct list *ptr; // указатель на следующий элемент
};
Основные действия, производимые над элементами ОЛС:
- Инициализация списка
- Добавление узла в список
- Удаление узла из списка
- Удаление корня списка
- Вывод элементов списка
- Взаимообмен двух узлов списка
Инициализация ОЛС
Инициализация списка предназначена для создания корневого узла списка, у которого поле указателя на следующий элемент содержит нулевое значение.
1
2
3
4
5
6
7
8
9
struct list * init(int a) // а- значение первого узла
{
struct list *lst;
// выделение памяти под корень списка
lst = (struct list*)malloc(sizeof(struct list));
lst->field = a;
lst->ptr = NULL; // это последний узел списка
return(lst);
}
Добавление узла в ОЛС
Функция добавления узла в список принимает два аргумента:
- Указатель на узел, после которого происходит добавление
- Данные для добавляемого узла.
Процедуру добавления узла можно отобразить следующей схемой:
Добавление узла в ОЛС включает в себя следующие этапы:
- создание добавляемого узла и заполнение его поля данных;
- переустановка указателя узла, предшествующего добавляемому, на добавляемый узел;
- установка указателя добавляемого узла на следующий узел (тот, на который указывал предшествующий узел).
Таким образом, функция добавления узла в ОЛС имеет вид:
1
2
3
4
5
6
7
8
9
10
struct list * addelem(list *lst, int number)
{
struct list *temp, *p;
temp = (struct list*)malloc(sizeof(list));
p = lst->ptr; // сохранение указателя на следующий узел
lst->ptr = temp; // предыдущий узел указывает на создаваемый
temp->field = number; // сохранение поля данных добавляемого узла
temp->ptr = p; // созданный узел указывает на следующий элемент
return(temp);
}
Возвращаемым значением функции является адрес добавленного узла.
Удаление узла ОЛС
В качестве аргументов функции удаления элемента ОЛС передаются указатель на удаляемый узел, а также указатель на корень списка.
Функция возвращает указатель на узел, следующий за удаляемым.
Удаление узла может быть представлено следующей схемой:
Удаление узла ОЛС включает в себя следующие этапы:
- установка указателя предыдущего узла на узел, следующий за удаляемым;
- освобождение памяти удаляемого узла.
1
2
3
4
5
6
7
8
9
10
11
12
struct list * deletelem(list *lst, list *root)
{
struct list *temp;
temp = root;
while (temp->ptr != lst) // просматриваем список начиная с корня
{ // пока не найдем узел, предшествующий lst
temp = temp->ptr;
}
temp->ptr = lst->ptr; // переставляем указатель
free(lst); // освобождаем память удаляемого узла
return(temp);
}
Удаление корня списка
Функция удаления корня списка в качестве аргумента получает указатель на текущий корень списка. Возвращаемым значением будет новый корень списка — тот узел, на который указывает удаляемый корень.
1
2
3
4
5
6
7
struct list * deletehead(list *root)
{
struct list *temp;
temp = root->ptr;
free(root); // освобождение памяти текущего корня
return(temp); // новый корень списка
}
Вывод элементов списка
В качестве аргумента в функцию вывода элементов передается указатель на корень списка.
Функция осуществляет последовательный обход всех узлов с выводом их значений.
1
2
3
4
5
6
7
8
9
void listprint(list *lst)
{
struct list *p;
p = lst;
do {
printf(«%d «, p->field); // вывод значения элемента p
p = p->ptr; // переход к следующему узлу
} while (p != NULL);
}
Взаимообмен узлов ОЛС
В качестве аргументов функция взаимообмена ОЛС принимает два указателя на обмениваемые узлы, а также указатель на корень списка. Функция возвращает адрес корневого элемента списка.
Взаимообмен узлов списка осуществляется путем переустановки указателей. Для этого необходимо определить предшествующий и последующий узлы для каждого заменяемого. При этом возможны две ситуации:
- заменяемые узлы являются соседями;
- заменяемые узлы не являются соседями, то есть между ними имеется хотя бы один элемент.
При замене соседних узлов переустановка указателей выглядит следующим образом:
При замене узлов, не являющихся соседними переустановка указателей выглядит следующим образом:
При переустановке указателей необходима также проверка, является ли какой-либо из заменяемых узлов корнем списка, поскольку в этом случае не существует узла, предшествующего корневому.
Функция взаимообмена узлов списка выглядит следующим образом:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
struct list * swap(struct list *lst1, struct list *lst2, struct list *head)
{
// Возвращает новый корень списка
struct list *prev1, *prev2, *next1, *next2;
prev1 = head;
prev2 = head;
if (prev1 == lst1)
prev1 = NULL;
else
while (prev1->ptr != lst1) // поиск узла предшествующего lst1
prev1 = prev1->ptr;
if (prev2 == lst2)
prev2 = NULL;
else
while (prev2->ptr != lst2) // поиск узла предшествующего lst2
prev2 = prev2->ptr;
next1 = lst1->ptr; // узел следующий за lst1
next2 = lst2->ptr; // узел следующий за lst2
if (lst2 == next1)
{ // обмениваются соседние узлы
lst2->ptr = lst1;
lst1->ptr = next2;
if (lst1 != head)
prev1->ptr = lst2;
}
else
if (lst1 == next2)
{
// обмениваются соседние узлы
lst1->ptr = lst2;
lst2->ptr = next1;
if (lst2 != head)
prev2->ptr = lst2;
}
else
{
// обмениваются отстоящие узлы
if (lst1 != head)
prev1->ptr = lst2;
lst2->ptr = next1;
if (lst2 != head)
prev2->ptr = lst1;
lst1->ptr = next2;
}
if (lst1 == head)
return(lst2);
if (lst2 == head)
return(lst1);
return(head);
}
Назад: Структуры данных