Array.mean (axis = 1) с циклом - PullRequest
       0

Array.mean (axis = 1) с циклом

0 голосов
/ 29 августа 2018

У меня есть массив с 1000 строк и 10 столбцов (прайс-лист). С помощью команды

price_list.mean(axis = 1)

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

Пример:

In: price_list
Out: array([[ 88.118629  ,  88.118629  ,  88.118629  , ...,  88.118629  ,
     88.118629  ,  88.118629  ],
   [ 87.89849451,  88.28521857,  87.88550764, ...,  88.63412578,
     88.10322998,  88.88926288],
   [ 88.65587777,  87.76942845,  88.48962856, ...,  88.2796555 ,
     88.63031452,  88.88182671],
   ...,
   [ 65.34289835,  66.92005094,  90.12852383, ..., 167.15607114,
    226.66403648, 130.07803463],
   [ 65.55047596,  66.5069593 ,  88.99919496, ..., 164.45858893,
    229.17325779, 129.15578263],
   [ 64.71865904,  66.40562405,  88.06256922, ..., 161.90378821,
    227.48460064, 127.58404374]])

In: price_list_new = price.list.mean(axis = 1)
Out: array([ 88.118629  ,  88.35964886,  88.36762515,  88.82571439,
    89.15239399,  88.74944235,  88.82604126,  88.48155552,
    88.70669718,  88.87349793,  88.49569989,  88.3928375 ,
    88.44854633,  88.38734393,  88.51877214,  88.53055382,
    88.47660207,  88.08328303,  88.05407612,  87.73566519,
    88.10523588,  87.72906819,  87.53641688,  87.5564761 ,
    87.4484196 ,  .............])

Ответы [ 2 ]

0 голосов
/ 29 августа 2018
price_list.mean(axis = 1)
# array([ 3.5, 11.5, 19.5, 27.5, 35.5])

То же самое можно сделать путем итерации по массиву numpy и вычисления среднего значения для каждой строки.

for i in price_list:
    print(i.mean())

или

[i.mean() for i in price_list]
0 голосов
/ 29 августа 2018

Сначала я создаю подделку price_list:

import numpy as np
price_list = np.random.rand(10,1000)
price_list.mean(axis = 1)
#> array([0.49730006, 0.48494404, 0.4948243 , 0.49762745, 0.49727592,
#>     0.50856465, 0.4993344 , 0.49325429, 0.4938947 , 0.50599995])

Теперь мы можем сделать это один раз, используя векторизованные массивы:

price_list_mean = np.zeros(10)
for i in range(price_list.shape[1]):
    price_list_mean = price_list_mean + price_list[:,i]
price_list_mean = price_list_mean/price_list.shape[1]

# Checking the solution
np.isclose(price_list_mean,price_list.mean(axis = 1))
#> array([ True,  True,  True,  True,  True,  True,  True,  True,  True,  True])

Или мы можем сделать это, используя двойной цикл:

price_list_mean = np.zeros(10)
for j in range(price_list.shape[0]):
    for i in range(price_list.shape[1]):
        price_list_mean[j] = price_list_mean[j] + price_list[j,i]
    price_list_mean[j] = price_list_mean[j] / price_list.shape[1]

# Checking the solution
np.isclose(price_list_mean,price_list.mean(axis = 1))
#> array([ True,  True,  True,  True,  True,  True,  True,  True,  True,  True])

ВНИМАНИЕ !: Эти решения гораздо более неэффективны, чем просто вычисление среднего значения с помощью функции. Они не должны использоваться, если только в дидактических целях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...