2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1 ... 42, 43, 44, 45, 46, 47, 48 ... 54  След.

А вам пакет PARI/GP интересен?
Да 83%  83%  [ 58 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 11%  11%  [ 8 ]
Всего голосов : 70
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.05.2023, 13:11 
Заслуженный участник
Аватара пользователя


13/08/08
14495

(Оффтоп)

Я сейчас откатился в теме и искал, не написано ли что про вектора векторов векторов. Не нашёл.
Согласен, что потребность в средствах решения исходит из задачи, но ведь неизвестно, что за задача будет завтра предложена. А можно заранее потренироваться с различных умениях, и они внезапно пригодятся. Конечно, этот подход к жизни хорош для школьного возраста, потом на него и времени не хватает, но потом время появляется :-) .

В данном случае меня интересует конструкция A[n].
Адресация v[2][3][5][7] к элементу в многоуровневой пирамиде вложенности у меня получилась методом тыка, но в документации я тоже ничего не нашёл. А где прочитать правило применения конструкций вида[A]?
например, для прежнего вввектора
print(a[2][3][1..2])
[231,232]
print(a[1..2][1][1])
[111,112,113]

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.05.2023, 13:53 


05/09/16
12058
Dmitriy40 в сообщении #1594736 писал(а):
Учитывая отсутствие стандартных типов данных для матриц размерности выше второй,

Для матриц определены всякие сложения-умножения-обращения и т.п. Потому они и есть в стандарных структурах данных.
$n$-мерный вектор это набор из $n$ компонент. 5-ти мерный - 5 компонент (5 чисел, в простом случае) :)
Для чего может понадобиться именно массив данных с тремя индексами так вот сразу представить трудно, но главное даже не это, а то, какие могут быть "стандартные" процедуры для таких массивов? Ну вот для матриц (обычных) есть всякие там определители и тому подобное. Для векторов могут быть определны скалярные произведения, векторные произведения. А что полезно-вычислительного можно сделать с "3-мерной матрицей чисел"?
gris в сообщении #1594711 писал(а):
Какие есть средства обработки?
Тут вопрос - а какие нужны? :mrgreen:

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.05.2023, 13:56 
Заслуженный участник


20/08/14
11765
Россия, Москва
gris
В документе gp_refcard.pdf (как я его себе для удобства обзываю, взят кстати на родном сайте PARI/GP, рекомендую!) прямо на первой (из всего 4-х, стоит всегда иметь перед глазами) странице:
Цитата:
Select Components
Caveat: components start at index n = 1.
n-th component of x -- component(x, n)
n-th component of vector/list x -- x[n]
components a, a + 1, . . . , b of vector x -- x[a..b]
(m, n)-th component of matrix x -- x[m, n]
row m or column n of matrix x -- x[m,], x[, n]
Дальше достаточно очевидно: если есть одномерный объект A[], то выбор его элемента будет A[3], а если его элементы сложного типа (например тоже вектора), то выбор элемента внутреннего объекта будет A[3][2], и так далее.
Интересные примеры адресации векторов есть в документации gp_users.pdf (тоже моё название) на странице 24 в пункте 2.3.14, например адресация с конца вектора.
Пример вложенной адресации есть для матриц внизу 26-й страницы:
Цитата:
All this is recursive, so if M is a matrix of matrices of : : : , an expression such as M[1,1][,3][4] = 1 is perfectly valid (and actually identical to M[1,1][4,3] = 1), assuming that all matrices along the way have compatible dimensions.
Пример вложенных векторов есть на 371-й странице.

-- 22.05.2023, 14:19 --

wrest в сообщении #1594745 писал(а):
А что полезно-вычислительного можно сделать с "3-мерной матрицей чисел"?
Я в общем больше думал не о примитивных типах, а об массивах. А они часто нужны довольно большой размерности (трёхмерное поле температур, или векторов намагниченности, или тензорное поле; и не обязательно только трёхмерное, размерностей может быть и сильно больше). Конечно их можно набрать из векторов, но не всегда это удобно.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.05.2023, 14:33 


05/09/16
12058
Dmitriy40 в сообщении #1594748 писал(а):
А они часто нужны довольно большой размерности (трёхмерное поле температур,

Ну а что это? Регулярная координатня сетка, к каждому узлу которой прибиты температуры?
Dmitriy40 в сообщении #1594748 писал(а):
и не обязательно только трёхмерное, размерностей может быть и сильно больше

Так я ж и говорю, например для обозначения координаты в трехмерном пространстве достаточно трех чисел. В четырехмерном - четырех чисел.
Многомерные массивы, разумеется, сделать можно. Вопрос-то был -
gris в сообщении #1594711 писал(а):
К чему можно применять? Какие есть средства обработки?
Я тут с вами согласен:
Dmitriy40 в сообщении #1594736 писал(а):
Средства обработки или отсутствуют (как и сами такие типы данных), или базируются на том что это всё же вектора.
Но можно считать что если вы не знаете зачем это нужно -- то оно вам и не нужно.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.05.2023, 14:54 
Заслуженный участник


20/08/14
11765
Россия, Москва
wrest в сообщении #1594751 писал(а):
Ну а что это? Регулярная координатня сетка, к каждому узлу которой прибиты температуры?
Да. Или более сложные структуры (математические вектора, тензоры, списки, наборы оных, в разных вариациях).

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 08:54 
Заслуженный участник
Аватара пользователя


13/08/08
14495
забавная конструкция встретилась
forprime( p=1,60, nextprime(p+1)-p==2 && print1(p, ", "))
3,5,11,17,29,41,59,

прямо для oeis :-)
это что же — if не нужен???
А нельзя ли то, что напечатано в консоли PARI/GP легко помещать в буфер обмена windows?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 09:42 


05/09/16
12058
gris в сообщении #1595232 писал(а):
это что же — if не нужен???

Это такой забавный лайфхак. PARI анализирует логическое выражение слева-направо, и если в конструкции A && B оказывается, что A ложно, то вычислять B нет смысла, так что B просто не выполняется.
Соответственно если переставить A и B местами, то работать будет не так (в выражении B && A вычисление B будет производиться всегда), запустите
? forprime( p=1,60, print1(p,", ") && nextprime(p+1)-p==2)
Кстати сам результат A && B в этом выражении всегда ложь, т.к. print() возвращает 0
Запустите например
? a=2;a=print(a);print(a)
Но я бы, пожалуй, не советовал так делать.
gris в сообщении #1595232 писал(а):
А нельзя ли то, что напечатано в консоли PARI/GP легко помещать в буфер обмена windows?

Ну это же не консоль PARI, это консоль Windows, так что работает как работает.
А что там нелёгкого? Выделил и нажал enter...

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 09:55 
Заслуженный участник
Аватара пользователя


13/08/08
14495
спасибо. Это баловство, конечно, но иногда хочется получить что-то побыстрее.
с консолью беда :oops:
вот я в окошке получил
(09:47) gp > forprimes( p=7,60,p%7==2&&print(p))
23
37
79
(09:47) gp >

И как мне выделить 23?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 09:57 


05/09/16
12058
gris в сообщении #1595241 писал(а):
И как мне выделить 23?

Мышкой...
В свойствах консоли посмотрите (кликните на левый верхний угол), должна быть галка тут
Изображение

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 10:02 
Заслуженный участник
Аватара пользователя


13/08/08
14495
мне наверное надо и по винде читать руководства :oops:
Получилось! Я всё-таки очень хороший ученик :-)
23
37
79
У меня, правда, "свойства" > "правка" > "выделение мышью" (винда 7, попроще)

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 10:20 


05/09/16
12058

(Оффтоп)

gris в сообщении #1595244 писал(а):
У меня, правда, "свойства" > "правка" > "выделение мышью" (винда 7, попроще)

Мне кажется этой галке Quick Edit Mode в свойствах консоли, что у меня на скриншоте, сто лет в обед (по крайней мере с Windows 2000 если не раньше).

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 10:34 
Заслуженный участник
Аватара пользователя


13/08/08
14495

(Оффтоп)

wrest, ну вот в свойствах
"Размер курсора",
"Запоминание команд" : размер буфера, Количество, Отбрасывать повторения. Я чувствую, что это полезно и надо изучить
"Правка": выделение мышью, быстрая вставка.
Винда кириллическая (Да благословит... имя его и приветствует :!: Где простенький смайлик восторга??? Вчера только видел ЕС на празднике кириллицы)

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 10:44 


05/09/16
12058

(Оффтоп)

gris
А, ну это просто перевод на русский, это не от версии виндовс зависит а от локализации интерфейса. Оно там всегда было. Ну, почти всегда.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 12:25 
Заслуженный участник


20/08/14
11765
Россия, Москва
gris
wrest в сообщении #1595239 писал(а):
Но я бы, пожалуй, не советовал так делать.
И я тоже, настоятельно.
Экономия трёх символов (if(,) за вычетом &&) потом обязательно выльется вам (или не вам!) в дополнительные трудности с пониманием и редактированием. Эмпирические правила оформления кода придумали не просто так. А на скорость выполнения кода такая экономия если и влияет, то совсем не сильно, тем более в не столь простых программах.

Вообще же PARI позволяет делать странные (но удобные) вещи, например мне буквально вчера понадобилась такая конструкция:
while(aa=precprime(a-1); bb=nextprime(b+1); aa+bb==dd , a=aa; b=bb)
Т.е. вместо простого условия сначала делается предварительная работа, а условие проверяется лишь от последнего оператора (сравнения). Потому что результат предыдущих операторов в условии не нужен и подавляется символом ";". И такая замена одиночного оператора на целый список операторов допустима вообще везде, например можно в print(p,a) сделать что-то вроде print(b=p*2+a;c=b\3;d=2^(b+a%c);p+d,a) и напечатано будет два значения, p+d и a.
Это кстати очень похоже на объявление функции: там тоже куча предварительных действий, а в качестве результата возвращается значение последнего вычисленного оператора (если нет явного return).

(Оффтоп)

gris в сообщении #1595241 писал(а):
но иногда хочется получить что-то побыстрее.
с консолью беда :oops:
вот я в окошке получил
(09:47) gp > forprimes( p=7,60,p%7==2&&print(p))
23
37
79
(09:47) gp >
Куда торопитесь? Тут сразу две опечатки: и "s" в forprimes лишняя (т.е. такой код вообще не заработает), и 79>60 не получите. :mrgreen:
Кстати есть команда forprimestep(p=7+2,60,7,print(p)), выдающая ровно тот же результат, правда вероятно медленнее.
Ради интереса проверил скорость разных вариантов (по первому и трём последним делать не стоит):
Код:
? n=0; forprime(p=7,10^9, p%7==2&&n++); n
time = 7,458 ms.
8474795
? n=0; forprime(p=7,10^9, if(p%7==2, n++)); n
time = 7,472 ms.
8474795
? n=0; forprimestep(p=7+2,10^9,7, n++); n
time = 13,870 ms.
8474795
? n=0; forstep(p=7+2,10^9,7, ispseudoprime(p)&&n++); n
time = 23,729 ms.
8474795
? n=0; forstep(p=7+2,10^9,7, n+=ispseudoprime(p)); n
time = 39,906 ms.
8474795
? sum(i=1,10^9\7, ispseudoprime(7*i+2))
time = 28,127 ms.
8474795
Как видно замена if на && вообще не влияет, а forprimestep вдвое медленнее.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.05.2023, 13:38 
Заслуженный участник
Аватара пользователя


13/08/08
14495
Dmitriy40, согласен, что разные трюки в целом себя не оправдывают, кроме, конечно, экономии миллисекунды на блоке в квинтиллионном цикле :-)
Но я собираю их для одноразовых и быстрых показов.
forprimes постоянная ошибка :oops: Потому что сюда не копировал, а по памяти набивал и 79 из-за того, что там было до 100, но 60 на один символ меньше :-) много ошибок, да, от торопливости и не сосредоточенности.
ПАРИ мелочей не прощает, но хуже, если не замечает и трактует по-своему.
Ваши примеры интересны и тоже пойдут в копилочку.
Спасибо
(13:41) gp > n=0; forprime(p=7,10^9, p%7==2&&n++); n
time = 12,293 ms.
%3 = 8474795

Вот научился копировать с консоли и обнаружил, что можно и print не писать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 809 ]  На страницу Пред.  1 ... 42, 43, 44, 45, 46, 47, 48 ... 54  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group