2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Mathematica. Как сделать код "лучше"?
Сообщение07.08.2010, 23:15 


07/08/10
2
Здравствуйте, вопрос по стилю программирования в Математике.
Задача: Посчитать "гистограммную характеристику" неких свойств объекта.
Объект состоит из множества точек плоскости, с целочисельными координатами.
Позиция в гистограмме и интегральная характеристика, обновляемая в этой позиции формализуются отдельно.
Моё решение:
Код:
(* Вычисление позиции в гистограмме, обновление для одной точки *)
PointUpdateResult[res_, x_, y_, n_] := Block[ {offset = MyOffset[x, y, n] (* позиция в гистограмме *)}, 
   ++res[[offset,1]]; (* количество *)
    res[[offset,2]] += Sqrt[x^2 + y^2]; (* "интегральное свойство" *)
];
SetAttributes[PointUpdateResult, {HoldFirst}]; 

(* итерация по точкам, накопление необходимого свойства *)
UpdateResult[res, x_, y_, w_, Order_] := For[cr=0, cr<Order, ++cr;
   PointUpdateResult[res, x+cr, y, Order] ];
SetAttributes[UpdateResult, {HoldFirst}];

(* функция, работающая с самим объектом *)
SectorFeatures[x_, Order_]:= Block[ { params=Runs[x], second_params = Mec[x], res=Table[{0,0},Order] (* "выделяем память" под гистограмму *)},
   UpdateResult[res,second_params,Order,#] & /@ params;
   res // MatrixForm
];


Таким образом, пришлось организовывать "передачу параметра по ссылке" для организации циклического накопления нужного мне свойства.
Возможно существуют другие приёмы итерирования, позволяющие решить задачу проще?
Или же какие-то пропущенные мной способы организации map-подобного контейнера (из C++, хранилище пар <уникальный_ключ, значение>)?

 Профиль  
                  
 
 Re: Mathematica. Как сделать код "лучше"?
Сообщение08.08.2010, 07:21 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
 i  Перемещено из "Программирования" в "Околонаучный софт"

 Профиль  
                  
 
 Re: Mathematica. Как сделать код "лучше"?
Сообщение08.08.2010, 10:49 
Заслуженный участник


27/04/09
28128
ngry в сообщении #343153 писал(а):
Или же какие-то пропущенные мной способы организации map-подобного контейнера
А так не пробовали?
  1. In >  map1[key1] = value1; map1[key2] = value32; (* add/change *) 
  2. In >  map1[key3] // Head != map1 (* exists *) 
  3. Out>  False 
  4. In >  map1[key2] (* get *) 
  5. Out>  value32 
  6. In >  map1[key2] =. (* delete *) 
Просто и со вкусом. :-)

Только я не понял, у вас так или не так. Не нашёл нигде map. Плохо искал.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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



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

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


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

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