2014-09-14 3 views
1

У меня очень большой массив чисел в виде тензора третьего порядка. Я хочу найти наивысшее из всех значений в этом тензоре. Как я могу это сделать в математике? Контекст заключается в том, что реакцию проводят путем изменения температурного давления и объема сосуда. Я хочу найти оптимальное сочетание трех, чтобы максимизировать продукт. Каждый элемент тензора представляет собой значение полученного продукта, соответствующее конкретной комбинации температурного давления и объема.Как найти расположение самого высокого элемента в тензоре в математике

ответ

1

Для получения некоторой матрицы, тензора или в основном списка списков реальных чисел вы можете просто использовать функцию Max, чтобы определить максимальное значение, а затем Position, чтобы сказать, где оно находится. Предполагая, что ваши данные не огромны (требуется некоторый консервативный/тщательный подход к экономии времени/памяти), это должно быть хорошо.

Например, вот случайный список списков списков вещественных чисел:

data = Table[RandomReal[], 
{i, 1, RandomInteger[{4, 8}]}, 
{j, 1, RandomInteger[{4, 8}]}, 
{k, 1, RandomInteger[{4, 8}]} 
]; 

Вы можете просто сделать:

m = Max[data] 
Position[data, m] 

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

data = Table[RandomInteger[{1, 10}], 
{i, 1, RandomInteger[{4, 8}]}, 
{j, 1, RandomInteger[{4, 8}]}, 
{k, 1, RandomInteger[{4, 8}]} 
]; 
m = Max[data] 
Position[data, m] 
1
Table[RandomInteger[100, 3], 3] 

Prepend[Ordering[%[[First[Ordering[[email protected]*Sort /@ %, -1]]]], -1], 
First[Ordering[[email protected]*Sort /@ %, -1]]] 

% обозначает тензор для сортировки, в данном случае это случайный тензор генерируется из Table[RandomInteger[100, 3], 3]

0

Это дает позицию и значение за один выстрел.

(m = RandomReal[{-1, 1}, {4, 3, 2}]) // MatrixForm 

enter image description here

[email protected][ 
    Flatten[MapIndexed[ {##} &, #, {-1}], ArrayDepth[#] - 1], 
    First] &@m 

{0,903213, {3, 2, 2}}

Вот альтернативный, который будет работать с неровными списков:

Module[{h}, 
    [email protected][List @@@ Flatten[MapIndexed[[email protected]## &, #, {-1}]], 
    First]] &@{{1, 2, 3}, {4, 5, {2, 3}}} 

{5, {2, 2}}

Смежные вопросы