Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 164

Найти значение по индексу без потери местонахождения в векторе

22.10.2025, 13:18. Показов 979. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть вопрос, как найти значения по индексу.
В приложении представлен массив значений представленный двумя рядами. Первый ряд это месяцы, второй- это значения соответственно. Необходимо найти и создать ряды значений за каждый месяц. Но месяцы в столбике слева не четко регулярны, то есть то с 4, то с 5 месяца начинаются, а иногда нет и других месяцев.
Вот пример их распределения.

4 1
5 4
6 8
7 12
8 8
9 5
10 12
11 21
12 2
5 12
6 4
9 3
10 15
11 3
4 16
5 8
7 13
8 7
9 11
10 9
11 5


Matlab M
1
2
3
4
5
6
7
8
9
А4=GUnic(:,1);% Месяцы
 k4 = find(A4==4);% берем 4 если он есть 
 AN4=GUnic(:,2);% значение в соответствующих месяцах
Nes4=AN4(k4);% получили значения всех значений в 4 месяце
 
А5=GUnic(:,1);% Месяцы
 k5 = find(A5==5);% берем 5 если он есть 
 AN5=GUnic(:,2);% значение в соответствующих месяцах
Nes5=AN5(k5);% получили значения всех значений в 5 месяце
В итоге получим ряды значений. Но так как не в каждом году допустим есть 4 мес. в этих данных, то получается ряд более короткий чем ряд годов. Теряются данные и ряд склеивается например 2000 год и следующий будет допустим 2002 или другой год.
И не видно в конечном полученном ряду к какому году относятся значения.
Как можно проиндексировать так, что бы это учесть?
 Комментарий модератора 
Как можно более полно описывайте суть проблемы или вопроса
Вложения
Тип файла: txt IndZn.txt (2.5 Кб, 11 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2025, 13:18
Ответы с готовыми решениями:

Построить процедуру-функцию для определения местонахождения автомобиля через t после его выезда из пункта А
Необходимо написать процедуру-функцию в MathCAD для решения задачи, но я представить себе даже не...

Найти значения в массиве по индексу из другого вектора
Здравствуйте. Хотелось найти значения в массиве или в векторе по индексу значений из другого...

Как присвоить значению X:= F с верхним индексом n и нижним индексом 2 (см. вложение)
Как присвоить значению X:= F с верхним индексом n и нижним индексом 2 (см. вложение)

10
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,490
22.10.2025, 13:56
Юля С, эта ваша тема чем-то отличается от этой вашей же темы? Как можно посчитать количество значений в векторе, которые не всегда регулярно повторяются?
0
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 164
22.10.2025, 17:27  [ТС]
Да, другие данные и другая задача .
0
 Аватар для nick55782012
2748 / 1924 / 954
Регистрация: 25.12.2016
Сообщений: 5,469
22.10.2025, 17:55
------------------------------
Миниатюры
Найти значение по индексу без потери местонахождения в векторе  
0
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 164
22.10.2025, 21:20  [ТС]
не поняла?

Добавлено через 1 час 6 минут
nick55782012, Значений должно быть в этом массиве 446. Каждый месяц повторяется от 53 до 58 раз
 Комментарий модератора 
Как можно более полно описывайте суть проблемы или вопроса


Matlab M
1
2
3
4
5
6
7
8
9
10
11
%GUnic файл из приложения, если добавить колонку с годами впереди, будет работать и по годам 
А4=GUnic(:,1);% Месяцы
 k4 = find(A4==4);% берем 4 если он есть 
 AN4=GUnic(:,2);% значение в соответствующих месяцах
Nes4=AN4(k4);% получили значения всех значений в 4 месяце
 
А5=GUnic(:,1);% Месяцы
 k5 = find(A5==5);% берем 5 если он есть 
 AN5=GUnic(:,2);% значение в соответствующих месяцах
Nes5=AN5(k5);% получили значения всех значений в 5 месяце
% Далее все месяцы получим
По такому же принципу найти соотвествие месяцу в колонке с годами


2005 4 1
2005 5 4
2005 6 8
2005 7 12
2005 8 8
2005 9 5
2005 10 12
2005 11 21
2005 12 2
2006 5 12
2006 6 4
2006 9 3
2006 10 15
2006 11 3
2007 4 16
2007 5 8
2007 7 13
2007 8 7
2007 9 11
2007 10 9
2007 11 5
2008 4 4
2008 5 5
2008 6 9
2008 7 12
2008 8 13
2008 9 4
2008 10 17
2008 11 9
2009 4 6
2009 5 3
2009 6 2
2009 7 6
2009 8 2
2009 9 15
2009 10 7
2009 11 13

При этом получатся ряды по годам за каждый месяц, но точки будут соединены подряд.

в 2005 году есть 4 месяц , в в 2006 году нет. По такому принципу надо, чтобы получилось так :
2005 2006 2007
4 NaN 4
1 NaN 16
А получается без пробелов, то есть без NaN и в ряду непонятно к какому году соответствует месяц.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
27.10.2025, 07:23
Юля С, Вам надо на отдельные группы по годам разбить? Эти группы куда записывать? В отдельные массивы? В один массив, но, например, трёхмерный? Или, может в массив ячеек?
0
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 164
27.10.2025, 14:30  [ТС]
196642822.5000000000000027.3000000000000-5.40000000000000627.7500000000001510.26000000000
196651018.3000000000000040.6000000000000-1.700000000000003661130.57000000000
196651118.1000000000000054.10000000000002.50000000000000282.3600000000001412.93000000000
196651218.2000000000000047.10000000000001.80000000000000298.4800000000001711.41000000000
196653119.20000000000000.40000000000000060.50000000000006253.4400000000001048.46000000000
19666425.9000000000000038.90000000000005.900000000000005181019.33000000000
19666526.70000000000000375.40000000000000568.7100000000001588.04000000000
19666625.4000000000000039.10000000000005518.1600000000002106.20000000000
19666725.1000000000000062.300000000000011353.9100000000002460.11000000000
19666823.500000000000007713.4000000000000237.3500000000002697.46000000000
19666922.2000000000000071.100000000000012.9000000000000206.4600000000002903.92000000000
196661019078.100000000000011.1000000000000150.1000000000003054.02000000000
196662318.4000000000000063.80000000000006.10000000000000226.3200000000001142.84000000000
19667322.50000000000000484.60000000000000402.7500000000001007.78000000000
196671124063.800000000000011.50000000000003001274.27000000000
196671224.8000000000000045.80000000000007.80000000000000421.6000000000001695.87000000000
196671324.7000000000000058.10000000000009.90000000000000365.5600000000002061.43000000000
196672429.9000000000000048.80000000000009.80000000000000600.9900000000001118.31000000000
196672528.4000000000000054.100000000000013.4000000000000426.0000000000001544.31000000000
196672629.5000000000000048.900000000000011.6000000000000528.0500000000002072.36000000000
196672725.9000000000000078.100000000000017.1000000000000227.9200000000002300.28000000000
196672822.8000000000000086.100000000000015.1000000000000175.5600000000002475.84000000000
196672919.5000000000000091.800000000000014.600000000000095.55000000000002571.39000000000
196673024.2000000000000076.100000000000014.5000000000000234.7400000000002806.13000000000
196673123.8000000000000075.100000000000014.8000000000000214.2000000000003020.33000000000
196681022.40000000000001.200000000000007011.8000000000000237.4400000000001203.31000000000
Такая структура данных исходных.
Файл прилагается.
Спросила изначально, только по массиву из двух столбиков, так как беру их из этого массива, можно любые брать.
По 9 столбцу считается все значения , например больше 1000( 100, 500, 1000, могут быть разные варианты), и получим общее количество месяцев с такими данными.
Получится исходя из таблицы:
год мес значение
1966 4 1
1966 5 4
так как нужно также взять и другие столбцы в этих же ячейках таблицы (массива), то надо правильно чтобы состыковались данные . Если в како- то позиции нет значения, то этот месяц будет NAN
А вывод как и исходные данные в виде массива год мес значение

Matlab M
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
txtfiles = dir( '*.txt' );
files={txtfiles(~[txtfiles.isdir]).name};
ss=1:size(files,2);
Nss=ss(1,end);
Nss1=Nss/2;
N=1;
for Nn=1:N;
for fnc = 1:ss(1,Nn);
filenameP1=[num2str(txtfiles(fnc).name) ];
ncidP1=importdata(files{fnc});
%end
A=ncidP1.data;
%A=importdata('res/d0424469.txt');
data1=A;
F=data1(:,[1,2,3,6,7,8,10]);
%r=find(all(F<9999,2) & data1(:,4)>=0);
r=find(all(F<9999,2) & data1(:,4)>=0 & data1(:,2)>=4); % с 4 мес
F1=F(r,:);
F1(:,8)=F1(:,4).*(F1(:,4)-F1(:,7)).*(F1(:,5)<2.5);
Y=F1(:,1);
miny=min(Y);
M=F1(:,2)+12*(Y-miny);
T=F1(:,8);
Summa=splitapply(@sum,T,findgroups(M));
f=find(diff(M)~=0)+1;
K=T(f);
Summa(2:end)=Summa(2:end)+Summa(1:end-1).*(K~=0);
UM=unique(M);
C=fix(UM/12);
Month=mod(UM,12);
Year=miny+C;
mz=find(Month==0);
Year(mz)=Year(mz)-1;
Month(mz)=12;
ff=sort([1;f;find(T==0);length(T)+1]);
dff=diff(ff);
A=mat2cell(T,dff,1);
CSum=cell2mat(cellfun(@cumsum,A,'UniformOutput',false));
F2=[F1 CSum];
F3=F2(CSum>1000,:);
X=(F3(:,1));
Ygod=F3(:,1);
miny1=min(Ygod);maxy2=max(Ygod);
G=(maxy2-miny1)+1;
S2=histcounts(X,G);
%dlmwrite(' filenameP1', S2,'\t');
dlmwrite([num2str(filenameP1) 'G.txt'],S2);
end
end
 
 
Az=Ygod;
d=diff(Az)~=0;
cs=cumsum([0 d']);
g=groupcounts(cs');% вектор из 59 значений, за каждый год 
god1=miny;
% для объяснения алгоритма
   g1=g(1);% первый год получили количество значений 
   g2=g(2);% второй год общее количество значений
   g3=g(3);
   g4=g(4);
 
% нарезка интервалов месяцев
   XX1=(F3(1:g1,2));
   XX2=(F3(g1+1:g1+g2,2));
% нарезка интервалов лет
 
GOD1=(F3(1:g1,1));
   GOD2=(F3(g1+1:g1+g2,1));
% получили годы все
 
 
 AzXX1=XX1; % за каждый год получить сколько есть значений в  каждом месяце и уникальные месяцы, но если один месяц выпадает, то значение уже не совпадает с уникальным месяцем
 dXX1=diff(AzXX1)~=0;
  csXX1=cumsum([0 dXX1']);
   gXX1=groupcounts(csXX1');
    Cuniq1 = unique(XX1);
     C1 = cat(1,Cuniq1,gXX1);
     
     
     AzXX2=XX2;
dXX2=diff(AzXX2)~=0;
 csXX2=cumsum([0 dXX2']);
  gXX2=groupcounts(csXX2');
   Cuniq2 = unique(XX2);
    C2 = cat(1,Cuniq2,gXX2);
 CunikALL = cat(1,Cuniq1    ,Cuniq2 ,Cuniq3 ,Cuniq4 ,Cuniq5 ,Cuniq6 ,Cuniq7 ,Cuniq8 ,Cuniq9 ,Cuniq10    ,Cuniq11    ,Cuniq12    ,Cuniq13    ,Cuniq14    ,Cuniq15    ,Cuniq16    ,Cuniq17    ,Cuniq18    ,Cuniq19    ,Cuniq20    ,Cuniq21    ,Cuniq22    ,Cuniq23    ,Cuniq24    ,Cuniq25    ,Cuniq26    ,Cuniq27    ,Cuniq28    ,Cuniq29    ,Cuniq30    ,Cuniq31    ,Cuniq32    ,Cuniq33    ,Cuniq34    ,Cuniq35    ,Cuniq36    ,Cuniq37    ,Cuniq38    ,Cuniq39    ,Cuniq40    ,Cuniq41    ,Cuniq42    ,Cuniq43    ,Cuniq44    ,Cuniq45    ,Cuniq46    ,Cuniq47    ,Cuniq48    ,Cuniq49    ,Cuniq50    ,Cuniq51    ,Cuniq52    ,Cuniq53    ,Cuniq54    ,Cuniq55    ,Cuniq56    ,Cuniq57    ,Cuniq58);
 gXXALL = cat(1,gXX1    ,gXX2   ,gXX3   ,gXX4   ,gXX5   ,gXX6   ,gXX7   ,gXX8   ,gXX9   ,gXX10  ,gXX11  ,gXX12  ,gXX13  ,gXX14  ,gXX15  ,gXX16  ,gXX17  ,gXX18  ,gXX19  ,gXX20  ,gXX21  ,gXX22  ,gXX23  ,gXX24  ,gXX25  ,gXX26  ,gXX27  ,gXX28  ,gXX29  ,gXX30  ,gXX31  ,gXX32  ,gXX33  ,gXX34  ,gXX35  ,gXX36  ,gXX37  ,gXX38  ,gXX39  ,gXX40  ,gXX41  ,gXX42  ,gXX43  ,gXX44  ,gXX45  ,gXX46  ,gXX47  ,gXX48  ,gXX49  ,gXX50  ,gXX51  ,gXX52  ,gXX53  ,gXX54  ,gXX55  ,gXX56  ,gXX57  ,gXX58);
GUnic=cat(1,CunikALL,gXXALL);
k4 = find(A111==4);
AN=GUnic(:,2);
% также и с позицией по году
GOD1=(F3(1:g1,1));
   GOD2=(F3(g1+1:g1+g2,1));
AzGOD1=GOD1;
     dGOD1=diff(AzGOD1)~=0;
     csGOD1=cumsum([0 dGOD1']);
     gGOD1=groupcounts(csGOD1');
     CuniqG = unique(GOD1);
     CGOD1 = cat(2,CuniqG,gGOD1);
  AzGOD2=GOD2;
  dGOD2=diff(AzGOD2)~=0;
  csGOD2=cumsum([0 dGOD2']);
  gGOD2=groupcounts(csGOD2');
  CuniqG2 = unique(GOD2);
  C2 = cat(2,CuniqG2,gGOD2);
 
  CunikALLGOD = cat(1,CuniqG    ,CuniqG2    ,CuniqG3    ,CuniqG4    ,CuniqG5    ,CuniqG6    ,CuniqG7    ,CuniqG8    ,CuniqG9    ,CuniqG10   ,CuniqG11   ,CuniqG12   ,CuniqG13   ,CuniqG14   ,CuniqG15   ,CuniqG16   ,CuniqG17   ,CuniqG18   ,CuniqG19   ,CuniqG20   ,CuniqG21   ,CuniqG22   ,CuniqG23   ,CuniqG24   ,CuniqG25   ,CuniqG26   ,CuniqG27   ,CuniqG28   ,CuniqG29   ,CuniqG30   ,CuniqG31   ,CuniqG32   ,CuniqG33   ,CuniqG34   ,CuniqG35   ,CuniqG36   ,CuniqG37   ,CuniqG38   ,CuniqG39   ,CuniqG40   ,CuniqG41   ,CuniqG42   ,CuniqG43   ,CuniqG44   ,CuniqG45   ,CuniqG46   ,CuniqG47   ,CuniqG48   ,CuniqG49   ,CuniqG50   ,CuniqG51   ,CuniqG52   ,CuniqG53   ,CuniqG54   ,CuniqG55   ,CuniqG56   ,CuniqG57   ,CuniqG58);
Вложения
Тип файла: rar новый 35.rar (57.3 Кб, 5 просмотров)
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
31.10.2025, 14:56
Юля С, всё равно непонятно, что Вы хотите склеить. Данные у Вас по годам уже собраны, выбирайте нужные столбцы и всё.
Либо Вы хотите как-то по-другому данные сгруппировать. Я Вас об этом спрашивал, но Вы так и не ответили. В каком виде должен быть новый массив представлен? Потому что и так видно, какие месяцы каким годам соответствуют. Зачем, в таком случае, делать непременно, чтобы количество месяцев во всех годах было одинаковым?
0
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 164
01.11.2025, 00:05  [ТС]
При сравнении рядов за все годы по месяцам так как будет сделано в конце bregres = regress(yNes, XZnac); вычисленные ряды от значений в столбцах 4, 5, 6, 7 из массива F3, в принципе не важно есть ли пропуски , и не будет какого то месяца , но если сравнивать эти ряды с каким-то другим рядом данных, то при пропуске, мы сравниваем данные соответственно смещенные.

Добавлено через 17 минут
G=(maxy2-miny1)+1;
S2=histcounts(X,G);
Тут они по годам распределены, а так как далее предполагается сравнение именно по месяцам, то и сортировка и склеивание предполагается по месяцам.
То есть надо получить ряды по всем имеющимся месяцам за все годы.
мес45678910
год3NaN678910
196643612111114
1967897531NaN
1968101197531
196915NaN14121086
197014151311975
1971161715131197
197229302826242220
197321222018161412
197413141210864
Так массив состоит из таких данных за 4, 5, 6, 7 и последний столбец из F3
но так как в последнем столбце данные не состыкуются с данными из 4, 5, 6, 7 столбца , их надо усреднить по этим месяцам, поэтому и нарезала % нарезка интервалов месяцев
XX1=(F3(1:g1,2));
XX2=(F3(g1+1:g1+g2,2));
% нарезка интервалов лет

GOD1=(F3(1:g1,1));
GOD2=(F3(g1+1:g1+g2,1));
% получили годы все
Чтоб соеденить
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
01.11.2025, 17:25
Юля С, для обработки первой приведённой Вами матрицы из двух столбцов такой код:
Matlab M
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
A=[4 1
5 4
6 8
7 12
8 8
9 5
10 12
11 21
12 2
5 12
6 4
9 3
10 15
11 3
4 16
5 8
7 13
8 7
9 11
10 9
11 5];
a=A(:,1);
V=[0;cumsum(diff(a)<0)];
Z=(min(a):max(a))';
m=length(Z);
n=V(end)+1;
B=repmat(Z,n,1);
[~,k]=ismember(a,B);
N=repmat(NaN,length(B),1];
N(k+m*V)=A(:,2);
M=[B,N];
1
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 164
21.11.2025, 16:42  [ТС]
Сделала полный алгоритм для расчета.
Но при запуске не на одном файле, а при нескольких, зацикливается и не выходит на результат.
Файл с кодом и два файла для обработки прикрепила в папке.
Вложения
Тип файла: rar pr.rar (1.80 Мб, 4 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2025, 16:42
Помогаю со студенческими работами здесь

Получить значение максимального значения индекса вектора
Подскажите пожалуйста, есть векторы значений, нужно взять значения с определенного индекса, а...

Индекс последнего значения вектора
Предположим, у меня есть массив, a = . Какая функция возвращает последнее значение и его индекс? ...

Найти в векторе индекс максимального числа
Найти в векторе индекс максимального числа и посчитать сумму всех чисел, слежующих после него сам...

Создание нового вектора посредством выборки значений данного вектора
Добрый день! Знаю, вопрос совсем простецкий, но как-то я совсем запуталась... Есть вектор из...

Вычисление вектора значений функции для нового вектора аргумента
Здравствуйте господа. При вычислении значений функции для нового вектора вместо значений в &quot;Р&quot;...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru