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

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

新規登録して質問してみよう
ただいま回答率
85.49%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

1851閲覧

複数の条件分けをした計算

Penefax

総合スコア38

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2017/09/11 06:43

お世話になっております。

###前提・実現したいこと
計算結果をcsvファイルに記録されるようにしたい。

###発生している問題・エラーメッセージ
計算が上手くいかない

TypeError: only length-1 arrays can be converted to Python scalars

###該当のソースコード

Python

1 X = (round((50/(l-50))*((x2 + x3)/2),2)) 2 Y = (round((50/(l-50))*((y2 + y3)/2),2)) 3 4 c = np.array([X]) 5 d = np.array([Y]) 6 7 X1 = [-23,-23.3,-23.3,-23.3,17.8,17.8,18.2,18,0,0,0,0,0,0] 8 Y1 = [14.5,11.2,8.1,5,13.5,10.2,7.1,4,0,-7.5,-15.25,-21.1,-27,-32.75] 9 Z1 = [151.8,148.75,145,141,150.8,147.75,144,140,155,161.3,167.85,172.75,177.75,177.5] 10 11 l2 = math.sqrt((X1-c)**2+(Y1-d)**2) 12 if l2 : 13 -28 < c < -18 , 9.5 < d < 19.5 14 X1 = -23 15 Y1 = 14.5 16 17 -28.3 < c < -18.3 , 6.2 < d < 16.2 18 X1 = -23.3 19 Y1 = 11.2 20 21 -28.3 < c < -18.3 , 3.1 < d < 13.1 22 X1 = -23.3 23 Y1 = 8.1 24 25 -28.3 < c < -18.3 , 0 < d < 10 26 X1 = -23.3 27 Y1 = 5 28 29 12.8 < c < 22.8 , 8.5 < d < 18.5 30 X1 = 17.8 31 Y1 = 13.5 32 33 12.8 < c < 22.8 , 5.2 < d < 15.2 34 X1 = 17.8 35 Y1 = 10.2 36 37 13.2 < c < 23.2 , 2.1 < d < 12.1 38 X1 = 18.2 39 Y1 = 7.1 40 41 -5 < c < 5 , -1 < d < 9 42 X1 = 18 43 Y1 = 4 44 45 -5 < c < 5 , -5 < d < 5 46 X1 = 0 47 Y1 = 0 48 49 -5 < c < 5 , -12.5 < d < -2.5 50 X1 = 0 51 Y1 = -7.5 52 53 -5 < c < 5 , -20.25 < d < -10.25 54 X1 = 0 55 Y1= -15.25 56 57 -5 < c < 5 , -26.1 < d < -16.1 58 X1 = 0 59 Y1 = -21.1 60 61 -5 < c < 5 , -32 < d < -22 62 X1 = 0 63 Y1 = -27 64 65 -5 < c < 5 , -37.25 < d < -27.25 66 X1 = 0 67 Y1 = -32.25

X,Yはリアルタイムで計算されて結果が得られるようになっています。XとYの計算結果それぞれを反映してX1,Y1の値が変わり計算されるようにしたい。
c、dはfloat型とlist型では計算できないと言われたのでlist型に変えただけ。

###補足情報(言語/FW/ツール等のバージョンなど)
windows10
python2.7
matplotlib
math
numpy
spyder

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

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

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

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

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

can110

2017/09/11 07:37

やりたいことがよく分かりません。新しいスカラー値X,YをX1,Y1リストに追加したいということでしょうか?
Penefax

2017/09/11 07:51

わかりにくくてすみません。最終的にはl2を求めたいです。そのため、リアルタイムで得られるX,Yの数値を各々指定範囲内に収まっているときにそれぞれのX1,Y1が欲しいということです
can110

2017/09/11 08:02

求めたいl2はスカラー値ですか?また「それぞれのX1,Y1が欲しい」というのもよく分かりません。X1,Y1はリストなのにコード中ではX1 = -23のようにスカラー値を代入している意図も分かりません。
can110

2017/09/11 08:05

具体的な値(l~y3から求まるX,Y,l2と、その結果から得られるX1,Y1)を示された方がよいと思います。
guest

回答1

0

ベストアンサー

やりたいことが把握できているか分かりませんが

XとYの計算結果それぞれを反映してX1,Y1の値が変わり計算されるようにしたい

X1,Y1の各要素について、l2を求めてその結果に従い値を更新するということであれば、以下のようなループでできます。

Python

1import math 2 3X1 = [-23,-23.3,-23.3,-23.3,17.8,17.8,18.2,18,0,0,0,0,0,0] 4Y1 = [14.5,11.2,8.1,5,13.5,10.2,7.1,4,0,-7.5,-15.25,-21.1,-27,-32.75] 5 6# X,Yはリアルタイムで計算されて結果が得られる 7l,x2,y2,x3,y3 = 1,2,3,4,5 8X = (round((50/(l-50))*((x2 + x3)/2),2)) 9Y = (round((50/(l-50))*((y2 + y3)/2),2)) 10c = X 11d = Y 12 13# X1,Y1の各要素について、l2を求めてその結果に従い値を更新する 14for i in range(len(X1)): 15 l2 = math.sqrt((X1[i]-c)**2+(Y1[i]-d)**2) 16 if l2 : 17 -28 < c < -18 , 9.5 < d < 19.5 18 X1[i] = -23 19 Y1[i] = 14.5 20 # 略

投稿2017/09/11 08:56

can110

総合スコア38256

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問