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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

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

Q&A

解決済

1回答

506閲覧

格子点の外枠だけを求めるアルゴリズム

physics303

総合スコア89

NumPy

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

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

1グッド

1クリップ

投稿2018/07/13 01:41

pythonを使っています。

python

1h, w = 30,30 2step = 5 3y, x = np.mgrid[step:h:step, step:w:step].reshape(2,-1)

とすると、5 から 25 まで 5 刻みの格子点のx座標とy座標が、x,yに格納されます。つまり、

(y,x) = (5,5),(5,10),(5,15),(5,20),(5,25),(10,5),…,(25,25)

といった具合です。実際に

print(y)

print(x)

とすると

[ 5 5 5 5 5 10 10 10 10 10 15 15 15 15 15 20 20 20 20 20 25 25 25 25 25]
[ 5 10 15 20 25 5 10 15 20 25 5 10 15 20 25 5 10 15 20 25 5 10 15 20 25]

と表示されます。ちなみに、ソースコード中でy,xをx,yと書かないのはわざとです。この格子点の外側だけ、

(y,x) = (5,5),(5,10),(5,15),(5,20),(5,25),(10,5),(10,25),(15,5),(15,25),(20,5),(20,25),(25,5),(25,10),(25,15),(25,20),(25,25)

をとりだすにはどしたらよいでしょう。つまり、

print(y)

print(x)

としたときに、

[ 5 5 5 5 5 10 10 15 15 20 20 25 25 25 25 25]
[ 5 10 15 20 25 5 25 5 25 5 25 5 10 15 20 25]

と表示されるように、yとxに数字を格納したいです。スマートな方法はないでしょうか。

イメージ説明

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

xが左辺または右辺 または yが上辺または下辺という条件で抽出すればよさそうです。
もちろん、h,w,step値およびメッシュ生成されることが分かっていれば、それらだけで計算でも求められますが。

Python

1import numpy as np 2h, w = 30,30 3step = 5 4y, x = np.mgrid[step:h:step, step:w:step].reshape(2,-1) 5left,top,right,bottom = min(x),min(y),max(x),max(y) 6for yy,xx in zip(y,x): 7 # xが左辺または右辺 または yが上辺または下辺 8 if xx == left or xx == right or yy == top or yy == bottom: 9 print(yy,xx) # 別のnumpy配列に入れるなりする

投稿2018/07/13 04:45

can110

総合スコア38266

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

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

physics303

2018/07/13 05:18

実装できました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問