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

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

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

DataSetは、ADO.NETアーキテクチャのコンポーネントです。データベースから取得したレコードをメモリ領域に格納するクラスを指します。データの保持やテーブル間のリレーション・制約といった保持も可能です。

NumPy

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

Python

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

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

2回答

1234閲覧

点群データの補間について

8c8

総合スコア3

DataSet

DataSetは、ADO.NETアーキテクチャのコンポーネントです。データベースから取得したレコードをメモリ領域に格納するクラスを指します。データの保持やテーブル間のリレーション・制約といった保持も可能です。

NumPy

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

Python

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

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

0クリップ

投稿2022/01/23 15:53

下図の点群のデータがあり、最大値最小値は以下です。

x_max: 68.5 , x_min: -7.5 , y_max: 27.5 , y_min: -15.5

点群の間隔はx軸y軸ともに1.0です。

これらのデータからxy座標の最大値最小値までデータのない部分にz=0の点群を追加したいです。

最大値最小値から作成した長方形の点群に対して、x,yの値が場合に上記のz成分を代入するなど考えたのですが、実装できず投稿させていただきました。よろしく願いします。

点群

python

1df = pd.read_csv("hogehoge.csv", header = None) 2arr = df.values 3x = arr[:,0] 4y = arr[:,1] 5z = arr[:,2]

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/01/23 21:53

「データのない部分のZの値」は何ですか?CSVでいうところの,,のような状態(カラ)ですか? もしカラならpandasのfillna(0)みたいな感じで行けるはずです。数値でないものが入っているなら別の方法でゼロと置換したらいいです。
guest

回答2

0

ベストアンサー

最初に meshgrid 状のデータフレームを作成して、そこに df の値を上書きします。

python

1import numpy as np 2import pandas as pd 3 4# test data 5df = pd.DataFrame({ 6 0: np.array([ -7.5, 0.5, 23.5, 68.5]), 7 1: np.array([-15.5, 0.5, 12.5, 27.5]), 8 2: np.array([2, 4, 6, 8]), 9}) 10 11# generate grid dataframe 12x_min, y_min = df.min()[:2] 13x_max, y_max = df.max()[:2] 14x = np.arange(x_min, np.ceil(x_max)) 15y = np.arange(y_min, np.ceil(y_max)) 16xx, yy = np.meshgrid(x, y) 17 18grid = pd.DataFrame({ 19 0: np.ndarray.flatten(xx), 20 1: np.ndarray.flatten(yy), 21 2: np.zeros(np.prod(xx.shape)), 22}) 23 24# overwrite 25dfx = pd.concat([df, grid]).drop_duplicates(subset=[0, 1]) 26 27# check 28print(grid.shape) 29#(3388, 3) 30print(dfx.shape) 31#(3388, 3) 32 33print(df) 34# 0 1 2 35#0 -7.5 -15.5 2 36#1 0.5 0.5 4 37#2 23.5 12.5 6 38#3 68.5 27.5 8 39 40print(dfx[dfx[2]>0]) 41# 42# 0 1 2 43#0 -7.5 -15.5 2.0 44#1 0.5 0.5 4.0 45#2 23.5 12.5 6.0 46#3 68.5 27.5 8.0 47 48# draw heatmap 49import seaborn as sns 50import matplotlib.pyplot as plt 51 52sns.set_theme() 53h = sns.heatmap(dfx.pivot(1, 0, 2), cmap='cool') 54h.invert_yaxis() 55h.set(xlabel='X', ylabel='Y') 56plt.show()

figure

投稿2022/01/24 02:22

編集2022/01/24 03:38
melian

総合スコア19771

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

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

8c8

2022/01/24 07:43

回答ありがとうございます。 こちらのプログラムを参考に変更を加えることで、目的の操作を実現することができました。
guest

0

dfが’X', ’Y', ’Z'というcolumnsを持つ場合で例を示します。

python

1>>> import numpy as np 2>>> import pandas as pd 3>>> 4>>> df = pd.DataFrame({'X':[1.5, 0.5, -1.5], 'Y':[3.5, 2.5, 4.5], 'Z':[5.0, 7.0, 6.5]}) 5>>> print(df) 6 X Y Z 70 1.5 3.5 5.0 81 0.5 2.5 7.0 92 -1.5 4.5 6.5 10>>> x_max = df['X'].max() 11>>> x_min = df['X'].min() 12>>> y_max = df['Y'].max() 13>>> y_min = df['Y'].min() 14>>> df_x = pd.DataFrame(np.arange(x_min, x_max+1, 1), columns=['X']) 15>>> print(df_x) 16 X 170 -1.5 181 -0.5 192 0.5 203 1.5 21>>> df_y = pd.DataFrame(np.arange(y_min, y_max+1, 1), columns=['Y']) 22>>> print(df_y) 23 Y 240 2.5 251 3.5 262 4.5 27>>> df_cross = pd.merge(df_x, df_y, how='cross') 28>>> print(df_cross) 29 X Y 300 -1.5 2.5 311 -1.5 3.5 322 -1.5 4.5 333 -0.5 2.5 344 -0.5 3.5 355 -0.5 4.5 366 0.5 2.5 377 0.5 3.5 388 0.5 4.5 399 1.5 2.5 4010 1.5 3.5 4111 1.5 4.5 42>>> df_all = pd.merge(df_cross, df, on=['X','Y'], how='left') 43>>> print(df_all) 44 X Y Z 450 -1.5 2.5 NaN 461 -1.5 3.5 NaN 472 -1.5 4.5 6.5 483 -0.5 2.5 NaN 494 -0.5 3.5 NaN 505 -0.5 4.5 NaN 516 0.5 2.5 7.0 527 0.5 3.5 NaN 538 0.5 4.5 NaN 549 1.5 2.5 NaN 5510 1.5 3.5 5.0 5611 1.5 4.5 NaN 57>>> df_all.fillna(0, inplace=True) 58>>> print(df_all) 59 X Y Z 600 -1.5 2.5 0.0 611 -1.5 3.5 0.0 622 -1.5 4.5 6.5 633 -0.5 2.5 0.0 644 -0.5 3.5 0.0 655 -0.5 4.5 0.0 666 0.5 2.5 7.0 677 0.5 3.5 0.0 688 0.5 4.5 0.0 699 1.5 2.5 0.0 7010 1.5 3.5 5.0 7111 1.5 4.5 0.0

投稿2022/01/23 23:42

ppaul

総合スコア24666

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

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

8c8

2022/01/24 07:43

回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問