質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

3026閲覧

n番目のデータの座標を取得する

Fallout_18

総合スコア124

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/10/23 05:22

以下のデータはモデルなので多少質問にずれがあるかもしれません。
2番目に大きいデータ(y)のときのxのデータが欲しい場合にグラフを読む以外に抽出できるやり方はあるのでしょうか。
*xの値はわからないとしています

python

1#データ生成で今回はxの値はわからないと仮定しています。 2import numpy as np 3np.random.seed(1) 4x = np.random.rand(10) 5y = np.random.rand(10) 6plt.scatter(x,y) 7plt.xlabel("x"),plt.ylabel("y")

私が、今やっているのは、目盛りをx軸の目盛りを細かくして読むという原始的なことを行っています。
試そうとしているのは、大きい順にyの配列を変えて2番目のときのxの配列の要素を返したいのですが。。。。

s_y = sorted(y,reverse=True) for i in x: if is_y[1]:  print(i)

みたいな感じでかければ良いのですが、上手くいきません。これはyがxの関数ではないので

def y(x): Y = np.random.rand(x) return Y

のように定義しないといけないのでしょうか。
質問が下手で申し訳ないです、要約すると、数多くあるデータの中の2番目に大きいデータyの時のxを正確に楽に取り出したいということです。

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

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

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

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

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

guest

回答3

0

argsort()とfancy indexingを使って書けるのでは。

python

1>>> import numpy as np 2>>> x = np.random.rand(10) 3>>> y = np.random.rand(10) 4>>> x 5array([0.39539229, 0.27839315, 0.30612499, 0.53668511, 0.11537017, 6 0.37899994, 0.46310087, 0.22778481, 0.70651473, 0.74575858]) 7>>> y 8array([0.96494026, 0.39726147, 0.86486727, 0.20188904, 0.41514313, 9 0.77089231, 0.8167929 , 0.76794535, 0.69582763, 0.44183132]) 10>>> y.argsort() 11array([3, 1, 4, 9, 8, 7, 5, 6, 2, 0]) 12>>> x[y.argsort()] 13array([0.53668511, 0.27839315, 0.11537017, 0.74575858, 0.70651473, 14 0.22778481, 0.37899994, 0.46310087, 0.30612499, 0.39539229])

投稿2018/10/23 05:33

hayataka2049

総合スコア30933

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

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

Fallout_18

2018/10/23 06:47

完全に理解しました!! ありがとうございます!
guest

0

ベストアンサー

numpy の argsort() を使いましょう。

  1. argsort() で片方の配列を昇順ソートし、その2番めの値を取得する。
  2. そのインデックスにあたるもう一方の値と取得する。

python

1import numpy as np 2 3np.random.seed(0) 4a = np.random.randint(0, 10, 10) 5b = np.random.randint(0, 10, 10) 6print('a', a) # a [5 0 3 3 7 9 3 5 2 4] 7print('b', b) # b [7 6 8 8 1 6 7 7 8 1] 8 9# a の要素を大きい順にソートしたときのインデックス 10indices = a.argsort()[::-1] # 昇順 argsort 11top2_index = indices[1] 12 13print(a[top2_index]) # 7 14print(b[top2_index]) # 1

投稿2018/10/23 05:34

tiitoi

総合スコア21956

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

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

Fallout_18

2018/10/23 05:45

私が行いたかったことです! ありがとうございます!
guest

0

二個のサイコロを振って、x, yを決めてるのですよね?
x,yに関連がないので、yからxの値を求めるのは不可能です。

3つ目のコードの案でも無理です、結局はランダムなので。
y = 3 * x などと、yからxを算出可能な関係であれば可能です。

投稿2018/10/23 05:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Fallout_18

2018/10/23 05:46

ですよね、おかげで解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問