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

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

ただいまの
回答率

90.61%

  • Python 2.7

    1235questions

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

  • NumPy

    420questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 671

Penefax

score 30

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

前提・実現したいこと

計算結果をcsvファイルに記録されるようにしたい。

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

計算が上手くいかない

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

該当のソースコード

        X = (round((50/(l-50))*((x2 + x3)/2),2))
        Y = (round((50/(l-50))*((y2 + y3)/2),2))

        c = np.array([X])
        d = np.array([Y])     

        X1 = [-23,-23.3,-23.3,-23.3,17.8,17.8,18.2,18,0,0,0,0,0,0]        
        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]
        Z1 = [151.8,148.75,145,141,150.8,147.75,144,140,155,161.3,167.85,172.75,177.75,177.5] 

        l2 = math.sqrt((X1-c)**2+(Y1-d)**2)
        if l2 :
            -28 < c < -18 , 9.5 < d < 19.5
            X1 = -23
            Y1 = 14.5

            -28.3 < c < -18.3 , 6.2 < d < 16.2
            X1 = -23.3
            Y1 = 11.2

            -28.3 < c < -18.3 , 3.1 < d < 13.1
            X1 = -23.3
            Y1 = 8.1

            -28.3 < c < -18.3 , 0 < d < 10
            X1 = -23.3
            Y1 = 5

            12.8 < c < 22.8 , 8.5 < d < 18.5
            X1 = 17.8
            Y1 = 13.5

            12.8 < c < 22.8 , 5.2 < d < 15.2
            X1 = 17.8
            Y1 = 10.2

            13.2 < c < 23.2 , 2.1 < d < 12.1
            X1 = 18.2
            Y1 = 7.1

            -5 < c < 5 , -1 < d < 9
            X1 = 18
            Y1 = 4

            -5 < c < 5 ,  -5 < d < 5
            X1 = 0
            Y1 = 0

            -5 < c < 5 , -12.5 < d < -2.5
            X1 = 0
            Y1 = -7.5 

            -5 < c < 5 , -20.25 < d < -10.25
            X1 = 0
            Y1= -15.25

            -5 < c < 5 , -26.1 < d < -16.1
            X1 = 0
            Y1 = -21.1

            -5 < c < 5 , -32 < d < -22
            X1 = 0
            Y1 = -27

            -5 < c < 5 , -37.25 < d < -27.25
            X1 = 0
            Y1 = -32.25


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

補足情報(言語/FW/ツール等のバージョンなど)

windows10
python2.7
matplotlib
math
numpy
spyder

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2017/09/11 16:37

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

    キャンセル

  • Penefax

    2017/09/11 16:51

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

    キャンセル

  • can110

    2017/09/11 17:02

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

    キャンセル

  • can110

    2017/09/11 17:05

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

    キャンセル

回答 1

checkベストアンサー

0

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

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

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

import math

X1 = [-23,-23.3,-23.3,-23.3,17.8,17.8,18.2,18,0,0,0,0,0,0]        
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]

# X,Yはリアルタイムで計算されて結果が得られる
l,x2,y2,x3,y3 = 1,2,3,4,5
X = (round((50/(l-50))*((x2 + x3)/2),2))
Y = (round((50/(l-50))*((y2 + y3)/2),2))
c = X
d = Y

# X1,Y1の各要素について、l2を求めてその結果に従い値を更新する
for i in range(len(X1)):
    l2 = math.sqrt((X1[i]-c)**2+(Y1[i]-d)**2)
    if l2 :
        -28 < c < -18 , 9.5 < d < 19.5
        X1[i] = -23
        Y1[i] = 14.5
    # 略

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 2.7

    1235questions

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

  • NumPy

    420questions

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