teratail header banner
teratail header banner
質問するログイン新規登録
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

842閲覧

eCDF(経験的累積分布関数)グラフを描きたい

yesman-0303

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/17 08:45

編集2022/11/17 12:46

0

0

前提

統計量G1のeCDF(経験的累積分布関数)グラフを描きたい。
しかし、np.sortを使ってもうまくいかない

実現したいこと

統計量G1のeCDF(経験的累積分布関数)グラフを描きたい

発生している問題・エラーメッセージ

ValueError Traceback (most recent call last) Cell In [42], line 23 21 x_sort = np.sort(G1) 22 ecdf = np.arange(1, n[i]+1) / n[i] ---> 23 plt.plot(G1, ecdf, drawstyle='steps-pre') 24 xx = np.linspace(-2, 2, 100) 25 norm_cdf = norm.cdf(xx) packages\matplotlib\pyplot.py:2728, in plot(scalex, scaley, data, *args, **kwargs) 2726 @_copy_docstring_and_deprecators(Axes.plot) 2727 def plot(*args, scalex=True, scaley=True, data=None, **kwargs): -> 2728 return gca().plot( 2729 *args, scalex=scalex, scaley=scaley, 2730 **({"data": data} if data is not None else {}), **kwargs) ... 506 if x.ndim > 2 or y.ndim > 2: 507 raise ValueError(f"x and y can be no greater than 2D, but have " 508 f"shapes {x.shape} and {y.shape}") ValueError: x and y must have same first dimension, but have shapes (10000,) and (10,)

該当のソースコード

python

1n = [10, 20, 30, 50, 100, 300, 500, 1000] #樣本數 2N =10000 #實驗次數 3alfa = 0.05 4for i in range(len(n)): 5 if i < 1 or i == 7: 6 print(i) 7 # eCDF 8 x_sort = np.sort(G1) 9 ecdf = np.arange(1, n[i]+1) / n[i] 10 plt.plot(G1, ecdf, drawstyle='steps-pre') 11 xx = np.linspace(-2, 2, 100) 12 norm_cdf = norm.cdf(xx) 13 plt.plot(xx, norm_cdf, linestyle = '--', lw=5, color='r', alpha=0.5) 14 plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/11/17 09:10

質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください (ここに書くのではなく、質問を編集して追記する) ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください
guest

回答1

0

ベストアンサー

G1の要素数が10000なのに対して、i=0の場合に、ecdfの要素数は10なので、G1の要素数とecdfの要素数が一致していないといった内容のエラーです。
したがって、G1の要素数とecdfの要素数を一致させる必要があります。

単にG1のeCDFグラフを書くのであれば以下のように書くことで実現できます。

Python

1G1 = np.sort(G1) 2G1_len = len(G1) 3ecdf = np.arange(1, G1_len + 1) / G1_len 4plt.plot(G1, ecdf, marker='o', drawstyle='steps-pre')

G1からi個重複ありで取り出して、取り出したものについてeCDFを書くのであれば以下のように書くことができます。

Python

1sample_G1 = np.random.choice(G1, i, replace=True) 2sample_G1 = np.sort(sample_G1) 3ecdf = np.arange(1, i + 1) / i 4plt.plot(sample_G1, ecdf, marker='o', drawstyle='steps-pre')

G1からi個重複なしで取り出すのであればnp.random.choice()のreplace引数をFalseに変更して以下のように書くことで実現できます。

Python

1sample_G1 = np.random.choice(G1, i, replace=False) 2sample_G1 = np.sort(sample_G1) 3ecdf = np.arange(1, i + 1) / i 4plt.plot(sample_G1, ecdf, marker='o', drawstyle='steps-pre')

投稿2022/11/17 13:20

fixk

総合スコア70

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yesman-0303

2022/11/18 15:37

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問