2015-01-15 3 views
1

У меня есть 3 матрицы с размерностью3 матрицы с размерностьюstruct-структура, с полями bit. В каждом поле есть два значения. Я хочу, чтобы разделить значения каждого поля путем суммирования значений каждого поля в размерности 3значение суммирования в структуре в MATLAB

если

struct(1,1,1).bit=[2, 3] 

struct(1,1,2).bit=[4, 5] 

struct(1,1,3).bit=[6, 7] 

мои новые Struct значения должны быть, например:

newstruct(1,1,1).bit=[2/(2+4+6) , 3/(3+5+7)] 

newstruct(1,1,2).bit=[4/(2+4+6) , 5/(3+5+7)] 

newstruct(1,1,3).bit=[6/(2+4+6) , 7/(3+5+7)] 
+0

Я предполагаю, что вы хотите '2/(2 + 4 + 6)', а не '2/2 + 4 + 6'? Ваш код также пропускает '[]' при создании массива. Первая строка устанавливает бит в '2'. – Daniel

+1

Вам также нужно исправить индексирование, это не 3d-индекс. Третья строка индексирует элемент с 1 по 3 в первом измерении. – Daniel

+0

Это не код, это пример о 3 измерениях одного поля моей структуры. – user3760558

ответ

0

As это MATLAB, вы должны пойти с массивом nD вместо struct. Тем не менее, если вы все еще хотите сделать это таким образом, не бойтесь старый добрый for -loop:

for d1 = 1:size(in,1) 
    for d2 = 1:size(in,2) 
     d3sum = sum(cat(1,in(d1,d2,:).bit),1); 
     for d3 = 1:size(in,3) 
      out(d1,d2,d3).bit = in(d1,d2,d3).bit./d3sum; 
     end 
    end 
end 
0

Я думаю, что единственный способ сделать это с for цикла, или использовать Н.Д. массивы :

s(1,1,1).bit = [2 3]; 
s(1,1,2).bit = [4 5]; 
s(1,1,3).bit = [6 7]; 

[m,n,p] = size(s); 
[mm,nn] = size(s(1,1,1).bit); % assume all elements of the structure have the same dimension 
struct_sum = zeros(1,nn); 

% compute the sums 
for k=1:p 
    struct_sum = struct_sum+s(1,1,k).bit; 
end 

% create the new stucture 
for k=1:p 
    s1(1,1,k).bit = s(1,1,k).bit./struct_sum; 
end 

UPDATE: вариант с Н.Д. массива

s(1,1,1,1:2)=[2 3]; 
s(1,1,2,1:2)=[4 5]; 
s(1,1,3,1:2)=[6 7]; 
s1 = s./sum(s); % you can specify sum(s,3) to sum along the 3rd dimension - you may also need to use squeeze(...) to remove unnecessary dimensions 

Проверьте это дает правильные результаты:

>> s1(1,1,:,1) 
ans = 

ans(:,:,1) = 0.16667 
ans(:,:,2) = 0.33333 
ans(:,:,3) = 0.50000 

>> [2 4 6]/12 
ans = 

    0.16667 0.33333 0.50000 

>> s1(1,1,:,2) 
ans = 

ans(:,:,1) = 0.20000 
ans(:,:,2) = 0.33333 
ans(:,:,3) = 0.46667 

>> [3 5 7]/15 
ans = 

    0.20000 0.33333 0.46667 
Смежные вопросы