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

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

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

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Python

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

Q&A

解決済

2回答

1334閲覧

while文で出力した行列をすべて横に結合したい。

S.K12

総合スコア16

NumPy

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Python

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

0グッド

0クリップ

投稿2020/10/08 03:53

編集2020/10/09 07:19

前提・実現したいこと

while文で出力した行列をすべて横に結合したいです。

こちら(dropboxへのリンク)のcsvからnumpyで読み込んだものをすべて横に結合したいです。

イメージ説明
上記の図だと行列の数は3つになっていますが、
実際はwhile文の任意の繰り返し回数(ソースコードでいうi)だけ出力されるので、
行列の数が任意に変動出来る場合もそれらすべてを結合する処理がしたいと思っています。

下記のコードの他にnp.hstackやnp.concatenateなども試してみたのですが、
どれも上手くいきませんでした。

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

TypeError Traceback (most recent call last) <ipython-input-18-6c96e44c1534> in <module> 18 ) 19 data = np.array(data).reshape(-1, 1) ---> 20 X = np.append(data, axis=1) 21 i = i + 1 22 print(X) <__array_function__ internals> in append(*args, **kwargs) TypeError: _append_dispatcher() missing 1 required positional argument: 'values'

該当のソースコード

Python

1import csv 2import os 3import numpy as np 4 5print("データ数を入力して下さい.") 6i = input() #数値入力 7 8if i.isdigit() and 0 <= int(i) <= 32767: #入力文字が範囲内の数値であるか確認 9 if os.path.exists(f"Desktop\data\test{i}.CSV"): #入力のファイルが存在するか確認 10 j = i 11 i = 0 12 X = [] 13 while int(i) <= int(j): 14 data= np.genfromtxt(f"Desktop\data\test{i}.CSV", #入力するファイルのパス 15 skip_header=16, #先頭16行目までを無視 16 delimiter=",", #ファイルの区切り文字 17 usecols=(3) #3列目を読み取りたい 18 ) 19 data = np.array(data).reshape(-1, 1) 20 X = np.append(data, axis=1) 21 i = i + 1 22 print(X) 23 24 else: 25 print('その入力のファイル名は存在しません.') #入力のファイルが存在しない場合 26 27else: 28 print('利用可能範囲外の入力です.') #文字もしくは範囲外の数値を入力した際に表示

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

windows 64bit
Anaconda Jupyter Notebook

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

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

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

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

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

meg_

2020/10/08 04:15

「この3つを1つにまとめて、3行n列にしたい」とありますが、画像は3行には見えませんが、3行にすることが欲しい結果ですか?
S.K12

2020/10/08 04:19

「n行3列」の間違いです。 ご指摘有難う御座いました。
guest

回答2

0

自己解決

少し強引ですが、pandasで何とか実現したかった内容が再現出来ました。

入力データ 2 3 3 3 0 -128.0 -116.0 -96.0 1 -128.0 -116.0 -96.0 2 -124.0 -116.0 -100.0 3 -128.0 -116.0 -96.0 4 -128.0 -116.0 -100.0 ... ... ... ... 3997 -124.0 -112.0 -92.0 3998 -120.0 -112.0 -96.0 3999 -124.0 -112.0 -92.0 4000 NaN NaN NaN 4001 412.0 372.0 324.0 [4002 rows x 3 columns]

Python

1import csv 2import os 3import numpy as np 4import pandas as pd 5 6print("データ数を入力して下さい.") 7i = input() #数値入力 8 9if i.isdigit() and 0 <= int(i) <= 32767: #入力文字が範囲内の数値であるか確認 10 if os.path.exists(f"Desktop\data\test{i}.CSV"): #入力のファイルが存在するか確認 11 i = 0 12 df1 = pd.read_csv(f"Desktop\data\test{i}.CSV",header=None, skiprows=16, usecols=[3]) 13 i = 1 14 while int(i) <= int(j): 15 df = pd.read_csv(f"Desktop\data\test{i}.CSV",header=None, skiprows=16, usecols=[3]) 16 df1 = pd.concat([df1, df], axis=1) 17 i = i + 1 18 print(df1) 19 else: 20 print('その入力のファイル名は存在しません.') #入力のファイルが存在しない場合 21 22else: 23 print('利用可能範囲外の入力です.') #文字もしくは範囲外の数値を入力した際に表示

投稿2020/10/11 17:14

編集2020/10/11 18:02
S.K12

総合スコア16

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

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

0

Python

1# array1 #array2 #array3 2#array([[-128.], array([[-116.], array([[-96.], 3# [-128.], [-116.], [-96.], 4# [-124.], [-116.], [-100.], 5# [-124.], [-112.], [ -92.], 6# [ nan], [-nan.], [ nan], 7# [ 412.]]) [ 372.]]) [ 324.]])

Python

1array4 = np.concatenate([array1, array2, array3], 1) 2#array([[-128., -116., -96.], 3# [-128., -116., -96.], 4# [-124., -116., -100.], 5# [-124., -112., -92.], 6# [ nan, nan, nan], 7# [ 412., 372., 324.]]) 8 9array4.shape 10#(6, 3)

投稿2020/10/08 11:37

meg_

総合スコア10760

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

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

S.K12

2020/10/09 07:17

すみません。質問の意図が正しく伝わっていなかったようなので補足させて下さい。 質問文の例の図だと行列の数は3つになっていますが、 実際はwhile文の任意の繰り返し回数(ソースコードでいうi)だけ出力されるので、 行列の数が任意に変動出来る場合もそれらすべてを結合する処理がしたいと思っています。
meg_

2020/10/09 08:23

> 行列の数が任意に変動 どういう意味でしょうか? 結合前の配列数が可変という意味なら、np.concatenateの引数のリストに全ての配列を格納すれば良いです。 回答は一例ですので細かい部分は調整なさってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問