В вашем примере вы делаете определяете 2D-изображение, так что вы получаете 2D-вывод. Если изображение действительно будет 1D, вы получите 1D, т.е.
image a := [2]: {123, 45}
MatrixPrint(a)
Таким образом, ваш второй вопрос на самом деле является ответом на ваш первый: вам нужно сделать одномерный фрагмент данных, который вы можете выполните команду slice1()
следующим образом:
image a := [2,1]: {
{123, 45}
}
MatrixPrint( a.slice1(0,0,0,0,2,1) )
Обратите внимание на некоторые особенности команды:
- Команда всегда предполагает ввод 3D; поэтому первые 3 параметра являются триплетом начального индекса x / y / z, даже если это просто данные 2D или 1D.
- 2-й триплет определяет выборку среза. Сначала указывается размерный индекс (0 = x), затем количество шагов выборки (2) и затем размер шага (1)
Подобные команды срезов существуют для 2D-срезов, 3D-срезов и nD-срезов из данных nD .
Команда matrixPrint
выводится только в окно результатов. Нет способа перенаправить это на какую-то строку. Однако вы можете легко создать себе метод, который бы это делал (хотя и не очень быстро для больших данных):
string VectorPrint( image img, string FormatStr, number maxNum )
{
if ( !img.ImageIsValid() ) return "{invalid}"
if ( 1 != img.ImageGetNumDimensions() ) return "{not 1D}"
string out = "{ "
number nx = img.ImageGetDimensionSize(0)
if (( nx <= maxNum ) || ( maxNum <= 2) )
{
for( number i=0; i<min(nx,maxNum); i++)
out += Format( sum(img[0,i]), FormatStr ) + ", "
out = out.left( out.len() - 2 )
}
else
{
for( number i=0; i<maxNum-1; i++)
out += Format( sum(img[0,i]), FormatStr ) + ", "
out = out.left( out.len() - 2 ) + ", ... , "
out += Format( sum(img[0,nx-1]), FormatStr )
}
out += " }"
return out
}
image a := [10,4]: {
{1,2,3,4,5,6,7,8,9,10},
{123, 45, 12.3, -12, 55, 1.2, 9999, 89.100, 1e-10, 0},
{0,0,0,0,0,0,0,0,0,0},
{1,2,3,4,5,6,7,8,9,10}
}
// Slice 2D image to 1D image at n'th line
number n = 1
image line := a.slice1(0,n,0,0,a.ImageGetDimensionSize(0),1)
// Printout with given number format and a maximum number of entries
string fStr = "%3.1f"
number maxN = 3
Result( "\n "+VectorPrint( line, fStr, maxN ) )