Массив координат X и Y - Как хранить массивы данных в скриптах?

У меня есть изображение атомных столбцов, и я хочу сохранить координаты X и Y максимального значения каждого атомного столбца, но я не знаю, как написать скрипт для хранения набора данных в виде массива. Помогите мне, пожалуйста.


person Aning    schedule 27.05.2017    source источник
comment
Этот вопрос не очень ясен. Вы имеете в виду, что вам нужна помощь с сохранением нескольких значений XY (в массиве) или с нахождением этих значений на изображении?   -  person BmyGuest    schedule 27.05.2017
comment
@BmyGuest извините, если мой вопрос не ясен. Да, я имею в виду хранение нескольких значений XY в массиве.   -  person Aning    schedule 29.05.2017
comment
@BmyGuest Спасибо, что предложили более четкое название вопроса! :D   -  person Aning    schedule 29.05.2017


Ответы (1)


Я не уверен, что понял вопрос, но если вы просто хотите сохранить несколько значений в «массиве», вам просто нужно признать, что любое 2D-изображение уже является массивом. Если вы хотите сохранить n значений пар XY, вы можете просто создать изображение [n x 2] и сохранить там значения. Некоторые примеры:

number n = 30       // number of pairs
image data := Realimage( "Data Array", 4, 2 , n )

for( number i = 0 ; i < n ; i++ )
{
    number xValue = i * 10                              // just something
    number yValue = xValue * sin( xValue / 100 * PI() )     // just something
    data.SetPixel(0, i, xValue )                // Set X at position i (first column)
    data.SetPixel(1, i, YValue )                // Set Y at position i (second column)
}

data.ShowImage()

// You may want to display the image as "Spreadsheet". (Type 7)
data.ImageGetImageDisplay(0).ImageDisplayChangeDisplayType(7)

// And you may want to label the columns
data.ImageGetImageDisplay(0).SpreadSheetImageDisplaySetColumnLabel( 0, "X values" )
data.ImageGetImageDisplay(0).SpreadSheetImageDisplaySetColumnLabel( 1, "Y values" )

Изображение отображается в виде электронной таблицы

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

 data[0, i] = xValue // Same as: data.SetPixel( 0, i, xValue )
person BmyGuest    schedule 27.05.2017
comment
@Анинг: Отлично. Я просто хочу добавить к этому, что в зависимости от ваших дальнейших целей с этим списком, другим вариантом может быть сохранение данных в группах тегов или списках тегов. Есть некоторые преимущества (например, более простая сортировка и изменение новых - не скалярных значений - данных), но также и недостатки (изображения можно использовать в вычислениях выражения изображения, которые намного быстрее, чем полагаться на извлечение одного значения). - person BmyGuest; 29.05.2017
comment
Спасибо за предложения! На самом деле, позже (в отдельном скрипте) мне нужно вернуться и использовать значения XY, которые хранятся в массиве. Возможно ли это сделать? (Извините, если, опять же, мой вопрос не ясен, так как я плохо говорю по-английски. Извините) - person Aning; 29.05.2017
comment
Да, вы просто используете GetPixel вместо SetPixel. Но в зависимости от того, как вам нужны эти числа — только одно из них или все по одному — вместо этого могут быть более эффективные способы использования image expressions. - person BmyGuest; 29.05.2017
comment
Хотел бы спросить.. Можно ли вызывать массивы в отдельном скрипте с тем, который использовался для создания массивов? (Извините за мой корявый английский. Я имею в виду, скажем, массивы создаются в сценарии А. Я хочу вызвать эти массивы в сценарии Б) Возможно ли это? - person Aning; 31.05.2017
comment
@ Aning Может быть, вам следует задавать разные вопросы отдельными вопросами, чтобы другим было легче их искать. Но в качестве быстрого ответа: если вы отображаете изображение, оно остается открытым и в памяти, когда сценарий завершается, поэтому другой сценарий может начаться с этого изображения. В качестве альтернативы вы можете сохранить изображение (или информацию) в глобальных тегах (или на диске). Наконец, вы можете написать один-единственный сценарий с несколькими функциями, а затем заставить этот единственный сценарий делать все это. Лучшее решение во многом зависит от того, что вы хотите сделать. - person BmyGuest; 31.05.2017