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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

Q&A

解決済

2回答

948閲覧

list型データの引き算

mk_taro5

総合スコア5

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

0グッド

0クリップ

投稿2020/10/08 22:18

編集2020/10/08 23:08

前提・実現したいこと

xの値,yの値が交互に並んでいるlist型のデータを2つ持っています.
この2つのlist型のデータからxの値が等しい場合にyの値を引き算する,というプログラムを作りたいです.この方法が分からず苦戦しています.
結果に関しては,xが等しい場合にそれと対になるyの値(等しいxがi番目ならi+1番目の値)の引き算の絶対値が記載されているlistが欲しいです.また,どの場所のyを引き算したのか,それを示すもの(xの値?)も知りたいです.
また,結果のlistの重複があっても,重複値を除かないデータが欲しいです.

動画解析で,輪郭の座標を抽出し,二枚の連続するフレームからy軸方向の速度を求める過程でこの問題に直面しました.

以下のようなデータだった場合,以下のような結果が欲しいです.

(例)
listデータ
[ 1 10 2 20 3 30 4 40 5 50]
[ 6 15 2 25 7 30 8 40 5 55]

結果
[ 2 5 5 5]
[ xの値 引き算の絶対値 xの値 引き算の絶対値]

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

meg_

2020/10/08 22:31

もっとシンプルな例で「この2つのlist型のデータからxの値が等しい場合にyの値を引き算する」の結果の例も提示してもうらうと回答しやすくなります。
mk_taro5

2020/10/08 22:42

ご指摘ありがとうございます.修正します.
meg_

2020/10/08 22:46

20-25=-5、50-55=-5ですが欲しい結果は「5」ですので、本当に欲しいのは”「この2つのlist型のデータからxの値が等しい場合にyの値を引き算」したものの絶対値の重複値を除いたリスト”でしょうか?
toast-uz

2020/10/08 22:49 編集

・引き算とは、2番目のリストのy - 1番目のリストのy、ということですか? ・例のように2箇所以上の「x」が等しい場合、結果の5はどのようにして得るのでしょうか?引き算の最大値?最小値?平均値? ・どの場所の「y」を引き算したか、の情報は無くなってよいのでしょうか? ・できればこの計算の「意味」を記載ください。条件不足な面を文脈で想定して回答しやすくなります。 全て質問文に記載ください。
toast-uz

2020/10/08 23:04

質問修正いただきありがとうございます。 「どの場所のyを引き算したのか,それを示すもの(xの値?)も知りたいです.」 とありますが、例の結果にはそのような要素はありません。 上記も考慮した例を作成ください。
mk_taro5

2020/10/08 23:09

お二方,ご指摘ありごとうございます.初学のため,拙い質問文で申し訳ありません. 依頼箇所を修正しました.よろしくお願いします.
quickquip

2020/10/08 23:24 編集

(内容を削除しました) ああ、0始まりじゃなくて1始まりで数えているのですか。
mk_taro5

2020/10/08 23:28

ご指摘ありがとうございます.2は二つのlistで等しいxの値(計算箇所),3番目の5も二つのlistで等しいxの値(計算箇所),2番目の5はx=2の箇所でのyの値の引き算の絶対値・4番目の5はx=5の箇所でのyの値の引き算の絶対値です. 4とはどこのことでしょうか?理解力がなくてすいません. 説明不足を反省し次回以降つなげたいと思います.
quickquip

2020/10/08 23:37

すみません。i番目が1始まりだと気づいたら全部繋がったので内容を削除させてもらいました。 私がもう少し考えればよかったのであって、質問者さんに非はありません。余計な手間を掛けさせてしまい申し訳ありませんでした。
guest

回答2

0

forを使っても、それほど難しくなく書けます。

python

1list1 = [ 1, 10, 2, 20, 3, 30, 4, 40, 5, 50] 2list2 = [ 6, 15, 2, 25, 7, 30, 8, 40, 5, 55] 3 4list_out = [] 5for i in range(0, len(list1), 2): 6 if list1[i] == list2[i]: 7 list_out.append(list1[i]) 8 list_out.append(abs(list1[i + 1] - list2[i + 1])) 9 10print(list_out) 11# [2, 5, 5, 5]

投稿2020/10/09 00:18

bsdfan

総合スコア4794

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

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

mk_taro5

2020/10/09 04:41

回答ありがとうございます.非常に読みやすくてすばらしいです.
guest

0

ベストアンサー

以下でどうでしょうか。一度2次元にしてxとyを区別してから処理すると、わかりやすいと思います。

Python

1import numpy as np 2 3list1 = [ 1, 10, 2, 20, 3, 30, 4, 40, 5, 50] 4list2 = [ 6, 15, 2, 25, 7, 30, 8, 40, 5, 55] 5 6# ndarray型に変換、xとyは次元で分離 7arr1 = np.array(list1).reshape(-1, 2) 8arr2 = np.array(list2).reshape(-1, 2) 9 10# 2つのリストの引き算・絶対値を算出、xの値を使うため元のリストと結合 11arr = np.concatenate([arr1, np.abs(arr1 - arr2)], 1) 12# xの引き算が0である行のみ抽出 13arr = arr[arr[:,2] == 0] 14# 2列目と3列目を削除して平坦化 15arr = np.ravel(np.delete(arr, [1, 2], 1)) 16 17# リストに戻す 18result_list = arr.tolist() 19print(result_list) 20# [2, 5, 5, 5]

投稿2020/10/08 23:37

toast-uz

総合スコア3266

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

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

mk_taro5

2020/10/09 04:41

回答ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問