1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 146
1

Создать матрицу из одномерного массива

16.05.2014, 15:04. Показов 2935. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет) Есть массив x, одномерный, размерностью N, необходимо разбить его на блоки (задается пользователем), затем сформировать матрицу таким образом, чтобы количество столбцов=количеству блоков, а строк=N/количество блоков и поместить в каждый столбец блок из массива x. Понимаю что не совсем понятно, приложу свой код (не рабочий) и картинку поясняющую. Заранее спасибо.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function S=SPEKT(x)
N=length(x);
M=input('Введите кол-во блоков : ');
K=N/M;
K=round(K);
S=[];
n=1;
for i=1:1:M
    for j=1:1:K
        if(i==1)
            S(j,i)=x(j);
        else
            S(j,i)=x(j+n-1);
    end
    n=n+K;
end
end
Миниатюры
Создать матрицу из одномерного массива  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2014, 15:04
Ответы с готовыми решениями:

Из заданного одномерного массива создать матрицу и заполнить её по условию
Ребята,помогите пожалуйста Задание 2 Из полученного массива приложение создает 2-мерный...

Из одномерного массива сформировать матрицу
Здравствуйте, форумчане, выручите пожалуйста. Вот такое задание по информатике: Задан массив из...

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

Сформировать матрицу из одномерного массива
Ребята нужна помощь. Как понимать эту часть условия. Благодарен за любой ответ! По массиву X(n)...

10
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 146
16.05.2014, 15:43  [ТС] 2
Надо как то без циклов, если было бы возможно, потому что еще fft считать для каждого блока потом надо будет..

Добавлено через 14 минут
Смотрите. Написал вот так.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function S=SPEKT(x)
N=length(x);
M=input('Введите кол-во блоков : ');
K=N/M;
K=round(K);
S(1:K,1:M)=0;
n=1;
for i=1:1:M
    if(i==1)
        S(1:K,i)=x(1:K);
    else
        S(1:K,i)=x((K*n)+1:K*(n+1));
        n=n+1;
      end
end
end
Но если ввести больше 100 блоков (даже 101), пишет ошибку ""??? Index exceeds matrix dimensions."", индекс превышает размеры матрицы. В чем может быть проблема?

Добавлено через 22 минуты
Есть подозрение что массив не кратен числу блоков и в этом проблема.. Посмотрите плз, местные спецы) массив <653943x1 double>)
0
119 / 112 / 30
Регистрация: 29.03.2012
Сообщений: 250
16.05.2014, 15:54 3
задача решается с помощью функции reshape
Matlab M
1
2
3
4
5
clear all; clc;
x=[1 2 3 4 5 6 7 8 9 10];
N=length(x);
M=5;
S=reshape(x, N/M, M);
0
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 146
17.05.2014, 10:39  [ТС] 4
kav0221, а если не только квадратную матрицу нужно?

Добавлено через 4 минуты
kav0221, нужно так сделать, чтобы если допустим массив не делится нацело, то отбрасывались оставшиеся отсчеты..

Добавлено через 17 часов 15 минут
Прикрепляю код который делает то что мне нужно. Вопрос следующий) как вывести спектрограмму получившейся матрицы? я думаю функцией imshow, но она почему то черную линию возвращает((

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
function SPEKT(x,y)
N=length(x);
M=input('Введите кол-во блоков : ');
K=N/M;
K=fix(K);
S1(1:K,1:M)=0;
S2(1:K,1:M)=0;
T1(1:K,1:M)=0;
T2(1:K,1:M)=0;
n=1;
k=size(x);
k=k(1,2);
if(k==1) %Если x и y одномерные массивы
for i=1:1:M
    if(i==1)
        S1(1:K,i)=fft(x(1:K));
        T1(1:K,i)=fft(y(1:K));
    else
        S1(1:K,i)=fft(x((K*n)+1:K*(n+1)));
        T1(1:K,i)=fft(y((K*n)+1:K*(n+1)));
        n=n+1;
    end
end
S1=abs(S1./max(max(abs(S1)))); %исходный сигнал
T1=abs(T1./max(max(abs(T1)))); %обработанный
imshow(S1);
else %Если x и y двумерные массивы 
    for i=1:1:M
    if(i==1)
        S1(1:K,i)=fft(x(1:K),1);
        S2(1:K,i)=fft(x(1:K),2);
        T1(1:K,i)=fft(y(1:K),1);
        T2(1:K,i)=fft(y(1:K),2);
    else
        S1(1:K,i)=fft(x((K*n)+1:K*(n+1),1));
        T1(1:K,i)=fft(y((K*n)+1:K*(n+1),1));
        S2(1:K,i)=fft(x((K*n)+1:K*(n+1),2));
        T2(1:K,i)=fft(y((K*n)+1:K*(n+1),2));
        n=n+1;
    end
end
S1=abs(S1./max(max(abs(S1)))); %исходный сигнал
S2=abs(S2./max(max(abs(S2))));
T1=abs(T1./max(max(abs(T1))));
T2=abs(T2./max(max(abs(T2))));
end
end
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
17.05.2014, 13:59 5
Вы все это (разбиение на блоки) и затеваете, как я понимаю, для того, что бы посчитать спектрограмму?
0
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 146
17.05.2014, 16:35  [ТС] 6
R2D2, да да, именно!)
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
17.05.2014, 18:53 7
а сигнальчик сбросите?
0
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 146
17.05.2014, 19:02  [ТС] 8
R2D2, сброшу) там если 2х канальная запись то выводить спектрограмму для левого и для правого канала по отдельности)
Вложения
Тип файла: rar 111.rar (2.56 Мб, 4 просмотров)
0
Эксперт по электронике
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
17.05.2014, 22:20 9
tarakan.nvkz, а чем Вам готовая функция не угодила?
0
1 / 1 / 0
Регистрация: 10.09.2011
Сообщений: 146
17.05.2014, 22:57  [ТС] 10
R2D2, а мне по блокам надо обязательно ее строить.. и количество блоков задавать
0
R2D2
17.05.2014, 23:50     Создать матрицу из одномерного массива
  #11

Не по теме:

Цитата Сообщение от tarakan.nvkz Посмотреть сообщение
по блокам надо обязательно ее строить
Ну так Вы можете задать этот параметр. Правда непрямым образом, но все же получится проще чем самому городить функцию. Тем более если Вы еще захотите делать взвешивание окнами или перекрытие блоков при вычислении БПФ...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2014, 23:50

Из одномерного массива сформировать квадратную матрицу
Дан одномерный массив С из N элементов. Сформировать из элементов С квадратную таблицу...

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

Из одномерного массива сформировать квадратную матрицу
Дан одномерный массив С из N элементов. Сформировать из элементов С квадратную таблицу...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru