Усреднение части массива powershell

124
15

Привет, я пытаюсь вернуть среднее значение для части массива, когда массив задан как

$multi = New-Object 'object[,]' $nucount,($readings + 2 )
and contains "1,4,2,6,3,4,5,nameofitem, cost of item"

Я хочу получить среднее значение для первых 7 элементов, которые, как я знаю, всегда будут первыми 7 и всегда будут числом. В случае выше число элементов, содержащих число, будет храниться в переменной, называемой $ показаниями. Таким образом, сумма, которую я хочу сделать, это добавить элементы в массив до значения $ readings. а затем устройство по $ показаниям.

Я знаю способы, подобные этому для всего массива

$Avg = ($array | Measure-Object -Average);
$Avg.Average;

или простой цикл и вычисление среднего количества добавлений и делений.

Но есть ли короткий способ сделать это. Я собирался использовать... оператора

$ multi [2,0.. $ чтения], но я получаю сообщение об ошибке

Невозможно преобразовать значение "System.Object []" типа "System.Object []" для ввода "System.Int32".

Любая помощь с этим будет отличной, если она может предоставить короткий код для замены

for (x=1 ; $x -eq $readings ; $X++) 
{
$sum = $sum + $multi[2,$x]
{
$avg= $sum/$readings

спросил(а) 2016-08-25T17:51:00+03:00 4 года, 3 месяца назад
1
Решение
72

возможно, это работает так:

0..$readings | % { $sum += $multi[$_] }

или если нет:

0..[int]$readings | % { $sum += $multi[$_] }

и сначала вам нужно инициировать $ sum

$sum = 0
0..$readings | % { $sum += $multi[$_] }
$avg = $sum/$readings

вот еще один пример того, что будет работать:

$arr = 1..50
$readings = 15
$arr[2..$readings]

рассматривает Eldo.Ob

ответил(а) 2016-08-25T17:59:00+03:00 4 года, 3 месяца назад
93

Вы идете правильно:

$readings=7
$array=1,4,2,6,3,4,5,"nameofitem", "cost of item"
$Avg = ($array[0..($readings - 1)] | Measure-Object -Average);
$Avg.Average;

Обратите внимание, что массивы основаны на нулевом значении...

ответил(а) 2016-08-25T18:11:00+03:00 4 года, 3 месяца назад
42

Как вы указали в своем комментарии, что массив является 1-мерным, решение является простым:

$multi | select -First 7 | Measure-Object -Average

ответил(а) 2016-08-25T20:08:00+03:00 4 года, 3 месяца назад
42

Попробуй это:

$avg = (0..7 |% { $multi[2,$_] } | Measure-Object -Average)

ответил(а) 2016-08-25T18:12:00+03:00 4 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема