У меня есть изображение атомных столбцов, и я хочу сохранить координаты X и Y максимального значения каждого атомного столбца, но я не знаю, как написать скрипт для хранения набора данных в виде массива. Помогите мне, пожалуйста.
Массив координат X и Y - Как хранить массивы данных в скриптах?
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
@Анинг: Отлично. Я просто хочу добавить к этому, что в зависимости от ваших дальнейших целей с этим списком, другим вариантом может быть сохранение данных в группах тегов или списках тегов. Есть некоторые преимущества (например, более простая сортировка и изменение новых - не скалярных значений - данных), но также и недостатки (изображения можно использовать в вычислениях выражения изображения, которые намного быстрее, чем полагаться на извлечение одного значения).
- person BmyGuest; 29.05.2017
Спасибо за предложения! На самом деле, позже (в отдельном скрипте) мне нужно вернуться и использовать значения XY, которые хранятся в массиве. Возможно ли это сделать? (Извините, если, опять же, мой вопрос не ясен, так как я плохо говорю по-английски. Извините)
- person Aning; 29.05.2017
Да, вы просто используете GetPixel вместо SetPixel. Но в зависимости от того, как вам нужны эти числа — только одно из них или все по одному — вместо этого могут быть более эффективные способы использования
image expressions
.
- person BmyGuest; 29.05.2017
Хотел бы спросить.. Можно ли вызывать массивы в отдельном скрипте с тем, который использовался для создания массивов? (Извините за мой корявый английский. Я имею в виду, скажем, массивы создаются в сценарии А. Я хочу вызвать эти массивы в сценарии Б) Возможно ли это?
- person Aning; 31.05.2017
@ Aning Может быть, вам следует задавать разные вопросы отдельными вопросами, чтобы другим было легче их искать. Но в качестве быстрого ответа: если вы отображаете изображение, оно остается открытым и в памяти, когда сценарий завершается, поэтому другой сценарий может начаться с этого изображения. В качестве альтернативы вы можете сохранить изображение (или информацию) в глобальных тегах (или на диске). Наконец, вы можете написать один-единственный сценарий с несколькими функциями, а затем заставить этот единственный сценарий делать все это. Лучшее решение во многом зависит от того, что вы хотите сделать.
- person BmyGuest; 31.05.2017