配列の中からある区間の値とその次の値を抽出したい

実現したいこと

1.配列の中から[0,0.1)の値だけを抽出し,その集合の標準偏差を知りたい
2.1で求めた値の,元の配列における配列要素の1つ先の集合に対して標準偏差を知りたい
3.1,2を[0.1,0.2),[0.2,0.3)...ごとに求めたい。

以下、具体例です。

np.array([0.122,0.431,0.235,0.018,0.569,0.143,0.103,0.100,0.175,0.070
,0.251,0.275,1.000,0.328,0.032,0.242,0.544,0.887,0.067,0.248])

が渡されたとき、
1.まず(0,0.1]までの値を抽出します。今回ですと,[0.018,0.070,0.032]となります。
2.次に[0.018,0.070,0.032]の各値の元の配列における要素番号の次の値を抽出します。今回ですと、[0.569,0.251,0.242]となります。
3.1,2,の2つの配列に対してそれぞれ標準偏差を求めます。
4.次に(0.1,0.2]に対して13を,その次は(0.20.3]に対して1~3を...とやっていきます。

試したこと

Python

import numpy as np from statistics import stdev import math arr = np.array([0.122,0.431,0.235,0.018,0.569,0.143,0.103,0.100,0.175,0.070 ,0.251,0.275,1.000,0.328,0.988,0.242,0.544,0.887,0.067,0.248]) for i in range(len(arr)): temp = np.empty(len(arr)) temp2 = np.empty(len(arr)) st_dev =np.empty(10) st_dev2 = np.empty(10) temporary = arr[i] temporary2 = math.floor(temporary*10) #取り出した値を10倍してその整数値がそのまま要素番号になる if i < temporary2 < (i+1): #取り出した値が[i,i+1)に入るかどうかを判定 np.append(temp,temporary) temporary2 = arr[i+1] #該当値の次の要素番号の値を取得 np.append(temp2,temporary2) st_dev[i] = stdev(temp) #標準偏差の計算 st_dev2[i] = stdev(temp2)

また、本来は与えられているデータはもっと多く最大1000万を想定しているので、高速化も考えています。

発生したエラーメッセージ

assert not total < 0, 'negative sum of square deviations: %f' % total AssertionError: negative sum of square deviations: -0.000000

ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント