Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/27: Рейтинг темы: голосов - 27, средняя оценка - 4.70
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860

Перевести код с python на c++. Экспоненциальное распределение

20.02.2021, 22:21. Показов 6577. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите перевести код с python на c++ дополнительно добавив вывод значений в excel или txt из строки 25. Мне необязательно чтобы было построение графика и его отображение. Мне главное нужно чтобы был осуществлен вывод значений координат графика в excel или txt из строки 25.

print(*list(zip(bins, lambd * np.exp(-lambd * bins))), sep='\n')
Python
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
import numpy as np
if __name__ == '__main__':
    import matplotlib.pyplot as plt
    lambd1 = 0.1
    N = 10000
    def expa(lambd, N):
        import random
        import math
        xi = []
        yi = []
        sum = 0
        sig = 0
        for i in range(N):
            xi.append(random.random())
            yi.append(-1/lambd * math.log(xi[i]))
            sum += yi[i]
        my = sum / N
        for i in range(N):
            sig = (yi[i] - my) ** 2
        sig = sig / (N - 1)
        return yi
    arr = expa(lambd1, N)
    def test_exponential(lambd, arr):
        count, bins, ignored = plt.hist(arr, 30, density=True)
        print(*list(zip(bins, lambd * np.exp(-lambd * bins))), sep='\n')
        plt.plot(bins, lambd * np.exp(-lambd*bins), linewidth=1, color='y')
        i = 0
        plt.grid()
        plt.show()
    s = test_exponential(lambd1, arr)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2021, 22:21
Ответы с готовыми решениями:

Экспоненциальное распределение (перевести из C# в Delphi)
Проблема с переводом в программирование не очень!!! есть такой код на с using System; using System.Collections.Generic; using...

Имитационная модель СМО. Экспоненциальное распределение (пример на python)
Подскажите как это выполнить на c++??? у меня есть рабочий пример выполненный python: import numpy as np if __name__ ==...

Экспоненциальное распределение
Известно, что X~E(2). Найти плотность вероятности X^2. Неужели это будет \lambda e^{-\lambda x } причем \forall x?

62
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
21.02.2021, 08:36
Это достаточно тяжелая задача. Там же и вывод графика...
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
21.02.2021, 11:48  [ТС]
Catstail, да мне не нужен сам график.

Мне нужны только сами его координаты - результат выводимый или в txt, или в xlsx
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
21.02.2021, 11:50  [ТС]
Catstail, мне нужен вывод вот такого результата в txt или xlsx
Миниатюры
Перевести код с python на c++. Экспоненциальное распределение  
0
21.02.2021, 12:02

Не по теме:

Цитата Сообщение от xamelione25 Посмотреть сообщение
Помогите перевести код с python на c++
Кликните здесь для просмотра всего текста

0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
21.02.2021, 12:04  [ТС]
Arsegg,

Не по теме:

Во имя отца, сына и святаго духа. Аминь

0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
21.02.2021, 12:09
Цитата Сообщение от xamelione25 Посмотреть сообщение
Помогите перевести код с python на c++ дополнительно добавив вывод значений в excel или txt из строки 25
Зачем? В C++ экспоненциальное распределение есть из коробки.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
21.02.2021, 13:09
Как-то так:

C++
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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
 
using namespace std;
 
double *expa(double lambda, int n, double &sig)
{
    double *y=new double[n];
    double sum=0,my,x;
    int i;
    for (i=0; i<n; i++)
    {
        x=(double)rand() / (double)RAND_MAX;
        y[i]=(-1.0/lambda)*log(x);
        sum+=y[i];
    }
    my=sum/n;
    sig=0;
    for (i=0; i<n; i++) sig+=(y[i]-my)*(y[i]-my);
    sig=sig/(n-1);
    return y;
}
 
 
int main()
{
    
    srand(time(0));
    double sig;
    double *z=expa(0.1,100,sig);
    int i;
    for (i=0; i<100; i++) cout << z[i] << endl;
    cout << "sig=" << sig << endl;
    
    delete [] z;
    return 0;
}
1
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
21.02.2021, 19:11  [ТС]
Catstail, если честно, я запутался))

а как-то можно сделать так чтобы было понятно какие координаты к каким иксам относятся
ну что-то похожее на:
X(i)_(a,b)
X(i+1)_(a,b)
...
X(30)_(a,b)
Добавлено через 1 час 52 минуты
Catstail, мне даже такой вариант как прислал avgoor более приемлем ...

но я из-за практики написания программ, ни "бум-бум", где и какие корректировки нужно сделать чтобы итоги были аналогичные как я привел в 4 посте.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
21.02.2021, 19:19
xamelione25, я не знаю, что тебе прислали. Программу я переписал. В твоем коде массив x - лишний. Он не нужен, поскольку не используется и не возвращается из программы. Картинка в твоем 4-м посте - мерзкая. Разбирать ее и портить зрение я не собираюсь. Запусти мой код на нужных данных и скажи, что там не так. Я исправлю.

Кроме того, в твоем коде есть явные ошибки:

Python
1
2
for i in range(N):
            sig = (yi[i] - my) ** 2 # в цикле перевычисляется sig (а, похоже, должно суммироваться)
Цитата Сообщение от xamelione25 Посмотреть сообщение
но я из-за практики написания программ, ни "бум-бум"
- в таком случае, может не стоит и браться?
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
21.02.2021, 19:23  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Кроме того, в твоем коде есть явные ошибки:
да ... в том коде ... есть то что не шевелится

я уже поудалял в нем все мертвое)))

Python
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
import numpy as np
if __name__ == '__main__':
    import matplotlib.pyplot as plt
    lambd1 = 0.1
    N = 10000
    def expa(lambd, N):
        import random
        import math
        xi = []
        yi = []
        for i in range(N):
            xi.append(random.random())
            yi.append(-1/lambd * math.log(xi[i]))
        return yi
    arr = expa(lambd1, N)
    def test_exponential(lambd, arr):
        count, bins, ignored = plt.hist(arr, 30, density=True)
        print(*list(zip(bins, lambd * np.exp(-lambd * bins))), sep='\n')
 
        plt.plot(bins, lambd * np.exp(-lambd*bins), linewidth=1, color='y')
        i = 0
        plt.grid()
        plt.show()
    s = test_exponential(lambd1, arr)
    import csv
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
21.02.2021, 19:30  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Запусти мой код на нужных данных и скажи, что там не так. Я исправлю.
там координаты точек идут все подряд и не понятно где координата x где y

мне нужно чтобы было вот так :
(0.0002963917108869096, 0.09999703612681472)
(2.6692734454070113, 0.07657287038150265)
(5.338250499103135, 0.058635782674863746)
(8.00722755279926, 0.04490043265668659)
(10.676204606495384, 0.03438256915468609)
(13.345181660191509, 0.026328500456013395)
(16.014158713887632, 0.02016108607660056)
(18.683135767583757, 0.015438379882940115)
(21.35211282127988, 0.011821961004699911)
(24.021089874976006, 0.00905268318673017)
(26.69006692867213, 0.006932104821418952)
(29.359043982368256, 0.005308268969975635)
(32.02802103606438, 0.004064814393824818)
(34.696998089760505, 0.0031126373116547746)
(37.36597514345663, 0.002383506378206113)
(40.034952197152755, 0.0018251733453419833)
(42.70392925084888, 0.0013976290439189146)
(45.372906304545005, 0.001070236396663845)
(48.04188335824113, 0.0008195350187717356)
(50.710860411937254, 0.0006275600877402665)
(53.37983746563338, 0.0004805550155926462)
(56.048814519329504, 0.00036798567583033867)
(58.71779157302563, 0.0002817855463423097)
(61.386768626721754, 0.00021577767653120037)
(64.05574568041787, 0.0001652320578311098)
(66.724722734114, 0.00012652667956203294)
(69.39369978781012, 9.688798197597221e-05)
(72.06267684150625, 7.419210781370399e-05)
(74.73165389520237, 5.6812710406181795e-05)
(77.4006309488985, 4.3504412515161e-05)
(80.06960800259462, 3.3313564777281967e-05)
то есть, те координаты которые я выведя в txt или xlsx (через *.csv) ... чтобы я потом далее смог по ним график построить!
Миниатюры
Перевести код с python на c++. Экспоненциальное распределение   Перевести код с python на c++. Экспоненциальное распределение  
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
21.02.2021, 19:45  [ТС]
Catstail, у меня есть код уже который для этого сделан ---->
НО!!! там проблема в том что у меня не выводятся иксы и игрики - кординаты точек по которым потом можно будет в инкселе построить график (такой как я выложил выше).
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
21.02.2021, 20:06
Непонятно, зачем тебе писать это на C++? Не лучше ли все сделать в Excel на VBA?

C++
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
51
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
 
using namespace std;
 
double *expa(double *x, double lambda, int n)
{
    double *y=new double[n];
    int i;
    for (i=0; i<n; i++)
    {
        y[i]=(-1.0/lambda)*log(x[i]);
    }
    return y;
}
 
 
int main()
{
    srand(time(0));
 
    int n;
    cout << "n=";
    cin >> n;
 
    double *y,*x = new double[n];    
    double sig;
    double sum=0,my;
    int i;
    
    for (i=0; i<n; i++) x[i]=100.0 * ((double)rand() / (double)RAND_MAX);
    
    y=expa(x,0.1,n);
    
    for (i=0; i<n; i++) sum+=y[i];
 
    my=sum/n;
    sig=0;
    for (i=0; i<n; i++) sig+=(y[i]-my)*(y[i]-my);
    sig=sig/(n-1);
    
    for (i=0; i<n; i++) cout << x[i] << "," << y[i] << endl;
    
    cout << "sig=" << sig << endl;
    
    delete [] y;
    delete [] x;
    return 0;
}
1
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
22.02.2021, 00:47  [ТС]
Catstail,
Цитата Сообщение от Catstail Посмотреть сообщение
зачем тебе писать это на C++? Не лучше ли все сделать в Excel на VBA?
такова политика ... выполнения лабораторной

Добавлено через 14 минут
Catstail, да с формой вывода все норм - значения отображаются как надо))))

но что-то с количеством выводимых чисел не то - их столько выводиться много не должно ...

их для вывода должно быть ~+- 30 - больше и не надо


и обратите внимание на ту партию чисел которую я выложил в 12 посте - это если запускать в питоне - то там всегда присутствует закономерность: иксы идут по линейному увеличению (порядковому), то есть там это значение на которое идет увеличение - оно также рандомно генерируется. А игрики в соответствии с расчетом идут на уменьшение и в гораздо меньшем числовом диапазоне.

и n=10000 всегда должно (по заданию), оно как-то влиять на количество выводимых чисел не должно.

Добавлено через 3 часа 35 минут
Catstail, вот: что-то похожее
https://rstudio-pubs-static.s3... 64d8d.html
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
22.02.2021, 07:05
Цитата Сообщение от xamelione25 Посмотреть сообщение
их для вывода должно быть ~+- 30 - больше и не надо
- в строке 33 замени 100 на 30
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
22.02.2021, 13:55  [ТС]
Catstail, вы извините, я понимаю - задрал уже я вас

но пожалуйста гляньте на скрин,

1. Ну во-первых та сотня которая там стояла она же не отвечает за количество (в данном случае) - хотя должна ... я изменил ничего не помогло

2. А здесь влияет на количество выводимых чисел n - хотя оно не должно (его даже вводить не нужно, это должна быть как константа)

3. И последнее там нет вообще никакого увеличения значений иксов и уменьшения значения игриков хотя эта зависимость должна быть !!!

4. да и значение sig там не нужно, там главное чтобы координаты графика выводились
Миниатюры
Перевести код с python на c++. Экспоненциальное распределение   Перевести код с python на c++. Экспоненциальное распределение  
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
22.02.2021, 14:03  [ТС]
Catstail, я сейчас только заметил, то что там еще в итоге значения игриков получаются отрицательные,

они там вообще не должны получаться отрицательные
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
22.02.2021, 14:06
Цитата Сообщение от xamelione25 Посмотреть сообщение
хотя должна
- не должна. Она отвечает за диапазон. За количество отвечает третий параметр expa - целое n.

Цитата Сообщение от xamelione25 Посмотреть сообщение
там нет вообще никакого увеличения значений иксов и уменьшения значения игриков хотя эта зависимость должна быть !!!
- с какого перепуга?

Вот твой код на Питоне:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import random
import math
 
lambd1 = 0.1
N = 100
def expa(lambd, N):
    xi = []
    yi = []
    sum = 0
    sig = 0
    for i in range(N):
        xi.append(random.random())
        yi.append(-1/lambd * math.log(xi[i]))
        sum += yi[i]
    my = sum / N
    for i in range(N):
        sig = (yi[i] - my) ** 2
    sig = sig / (N - 1)
    return yi
    
arr = expa(lambd1, N)  # Вызываю твою функцию
print(arr) # печатаю результат
Вот что он выдает при N=100:

Кликните здесь для просмотра всего текста

[4.106181908139451, 14.99817296727775, 39.121933133236034, 8.063533115794847, 0.05222594261032083, 18.030885171470473,
0.4993412024368059, 4.443503186829877, 6.287031486217131, 3.7433396859301435, 1.0640274584242064, 13.907739575640194,
8.153012475890664, 15.907370063871022, 6.237241865983995, 5.612488028089015, 1.9326638086615993, 14.155979062021666,
1.463564684851325, 6.623183950363563, 0.2550789237062358, 8.39837556779141, 5.301761136428379, 3.2093056926977064, 13.
736432273169337, 18.60416778524374, 3.763295270440428, 12.230947439528016, 3.1497072105476684, 5.488218050318902, 8.77
3042350758846, 8.20564685458567, 4.993468884782231, 0.2557563329779441, 7.951375135286158, 7.025743751338721, 12.51123
726798965, 15.42836533366817, 1.2663963561161886, 0.1912309729428599, 5.66109779661966, 13.684655708850414, 7.75262536
9286403, 7.4146383112802505, 3.666036005315565, 18.08368800460965, 7.046056544996685, 0.4781428996761058, 4.8565489953
84659, 6.220753158904152, 2.1253475100256756, 0.0027255068306815677, 15.04272024094934, 25.11740815893594, 32.33998030
229229, 4.8218083839907795, 2.5670678407498078, 0.12359364804006481, 0.5165472729474196, 7.00240139608182, 7.065190305
469563, 0.31332973535564734, 12.315243775900012, 23.575638878488554, 2.784736283125288, 2.2304562771594254, 4.82586736
8482595, 9.971686949710898, 34.282064055871054, 16.651958529102068, 3.4522135108612257, 18.72261999391452, 2.167101695
0199813, 2.8509952654772066, 10.719791554390847, 26.436366914021917, 14.613658879696288, 1.6478746177859371, 0.2831180
6289038255, 6.432772353805852, 1.6678227405333286, 0.9029002400555417, 9.551916679907656, 6.075820393248077, 14.476373
081881633, 18.480128866254613, 7.212992791982531, 7.450609889068815, 0.7481248720164834, 2.6492773701638934, 1.4151223
1258802, 26.682082605813694, 20.784889897776893, 7.773735865786185, 3.440169917167796, 4.536865020303527, 2.4453598635
41962, 5.724736052520061, 0.778377784911357, 9.765332150141926]


Где здесь иксы? Где увеличение? Их и не должно быть - random дает равномерное распределение. Код твой - дикая каша.
Если хочешь, чтобы тебе помогли - дай нормальную формулировку задания.
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
22.02.2021, 14:08  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Вот твой код на Питоне:
откуда вы его взяли???

гляньте на 11 пост
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2021, 14:08
Помогаю со студенческими работами здесь

Экспоненциальное распределение.
У меня в задаче дано что в среднем приходит 10 заявок в месяц.Я написал функцию для генерации интервалов между заявками но почему то если...

Экспоненциальное распределение
Добрый вечер. Занимаюсь Экспоненциальным распределением и возникло множества вопросов на которые гугл не может дать ответы. Надо сделать...

Экспоненциальное распределение
Есть задача, все сделал, кроме распределения, не понимаю что с ним делать и как применить, чтобы получилось &quot;примерно 50 минут&quot;

Экспоненциальное распределение
При генерации случайных величин с помощью Exponential(1,0,500), например, величины распределяются примерно по теоретическому закону, но на...

Экспоненциальное распределение
Доброго времени суток! Столкнулся с задачей, связанной с экспоненциальным распределением. В моем случае имеется Бульдозер,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru