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

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

新規登録して質問してみよう
ただいま回答率
85.46%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

642閲覧

[Python]txtファイルの横並びの数値を[3, 6, n]の配列に格納したい。

Purin_Kumamusi

総合スコア2

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/01 14:27

編集2021/11/01 14:57

こんにちは
txtファイルの数値を[3,6,n]の配列に格納したいのですがやり方がわからず困っています。助けていただけると幸いです。

txtファイルは行ごとに
[番号(1)][秒数] [x1_1] [y1_1] [z1_1] [x2_1] [y2_1] [z2_1]...[x6_1] [y6_1] [z6_1]
[番号(2)][秒数] [x1_2] [y1_2] [z1_2] [x2_2] [y2_2] [z2_2]...[x6_2] [y6_2] [z6_2]
...

というように各秒ごとのxyz軸の座標データを出力したものです。
これを以下のように[3,6,n]の配列に格納したいと思っています。

[ [ [x1_1, x1_2, ..., x1_n], [x2_1, x2_2, ..., x2_n], ... [x6_1, x6_2, ..., x6_n] ], [ [y1_1, y1_2, ..., y1_n], [y2_1, y2_2, ..., y2_n], ... [y6_1, y6_2, ..., y6_n] ], [ [z1_1, z1_2, ..., z1_n], [z2_1, z2_2, ..., z2_n], ... [z6_1, z6_2, ..., z6_n] ] ]

txtファイルの内容は以下です。実際は番号2000まであります。

1 0.000 445.00369 220.76532 1758.71790 403.69342 -198.27150 1426.80151 460.71683 -105.58707 1253.80420 519.70166 -107.22513 1143.01050 447.61652 -28.50393 982.86810 530.89508 48.23055 939.79755 2 0.005 445.20322 220.66788 1759.12476 403.69342 -198.27150 1426.80151 460.62009 -105.79584 1253.64514 519.70166 -107.22513 1143.01050 447.35663 -28.66521 983.15955 530.94617 48.26031 939.86365 3 0.010 444.78091 221.03682 1758.80908 403.69342 -198.27150 1426.80151 460.81293 -105.71410 1253.70520 519.90900 -107.11345 1143.12146 447.61069 -28.64266 983.06464 531.08563 48.16837 939.95715

何か教えていただけると幸いです。よろしくお願いします。

追記
とっかかりがつかめていないので現在のコードというのもほとんどできていないのですが,一応with openでファイルを開き,行ごとに取得したデータを1つずつ分離して配列に格納するという方法を考えていました.
以前に似たような内容で質問した際に教えていただいたコードを使えると思い,いじってはいるのですが正直あまり進んでいません.すいません.

Python

1def make_1D(data_1D): 2 return [float(s) for s in data_1D.split()][2:] 3def make_2D(data_2D): 4 return [make_1D(s) for s in data_2D] 5 6with open('Marker_200Hz.txt') as f: 7 data = f.readlines() 8 marker_list_3D = [] 9 10for i in range(len(data)): 11 marker_list_3D.append(np.array(make_2D(data[i]))) 12

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

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

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

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

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

1T2R3M4

2021/11/01 14:32

調べたこと、試したことおよび現時点での ソースコードを質問に追記していただけませんか。
melian

2021/11/01 15:07

numpy を使っても構いませんか?
guest

回答3

0

ベストアンサー

以下のようにします。

python

1a = np.loadtxt('Marker_200Hz.txt')[:, 2:].reshape(-1,6,3).T

実行結果

python

1>>> print(a) 2[[[ 445.00369 445.20322 444.78091] 3 [ 403.69342 403.69342 403.69342] 4 [ 460.71683 460.62009 460.81293] 5 [ 519.70166 519.70166 519.909 ] 6 [ 447.61652 447.35663 447.61069] 7 [ 530.89508 530.94617 531.08563]] 8 9 [[ 220.76532 220.66788 221.03682] 10 [-198.2715 -198.2715 -198.2715 ] 11 [-105.58707 -105.79584 -105.7141 ] 12 [-107.22513 -107.22513 -107.11345] 13 [ -28.50393 -28.66521 -28.64266] 14 [ 48.23055 48.26031 48.16837]] 15 16 [[1758.7179 1759.12476 1758.80908] 17 [1426.80151 1426.80151 1426.80151] 18 [1253.8042 1253.64514 1253.7052 ] 19 [1143.0105 1143.0105 1143.12146] 20 [ 982.8681 983.15955 983.06464] 21 [ 939.79755 939.86365 939.95715]]] 22

投稿2021/11/01 18:42

ppaul

総合スコア24666

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

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

Purin_Kumamusi

2021/11/02 07:53

回答ありがとうございます。とても参考になりました。
guest

0

numpy を使ってみました。

python

1import numpy as np 2 3arr = np.loadtxt('data.txt') 4arr = np.array([arr[:,i:][:,::3].T for i in range(2, 5)]) 5 6print(arr) 7# 8[[[ 445.00369 445.20322 444.78091] 9 [ 403.69342 403.69342 403.69342] 10 [ 460.71683 460.62009 460.81293] 11 [ 519.70166 519.70166 519.909 ] 12 [ 447.61652 447.35663 447.61069] 13 [ 530.89508 530.94617 531.08563]] 14 15 [[ 220.76532 220.66788 221.03682] 16 [-198.2715 -198.2715 -198.2715 ] 17 [-105.58707 -105.79584 -105.7141 ] 18 [-107.22513 -107.22513 -107.11345] 19 [ -28.50393 -28.66521 -28.64266] 20 [ 48.23055 48.26031 48.16837]] 21 22 [[1758.7179 1759.12476 1758.80908] 23 [1426.80151 1426.80151 1426.80151] 24 [1253.8042 1253.64514 1253.7052 ] 25 [1143.0105 1143.0105 1143.12146] 26 [ 982.8681 983.15955 983.06464] 27 [ 939.79755 939.86365 939.95715]]]

投稿2021/11/01 15:54

編集2021/11/01 16:41
melian

総合スコア19865

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

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

Purin_Kumamusi

2021/11/02 07:53

回答ありがとうございます。とても参考になりました。
guest

0

float 変換を追加

Python

1def to_float_list(tpl): 2 return list(map(float, tpl)) 3 4with open('Marker_200Hz.txt') as f: 5 lst = [s.split() for s in f.readlines()] 6 lstX = list(map(to_float_list, zip(*[v[2::3] for v in lst]))) 7 lstY = list(map(to_float_list, zip(*[v[3::3] for v in lst]))) 8 lstZ = list(map(to_float_list, zip(*[v[4::3] for v in lst]))) 9 print([lstX, lstY, lstZ])

float 変換していないコード

Python

1with open('Marker_200Hz.txt') as f: 2 lst = [s.split() for s in f.readlines()] 3 lstX = list(map(list, zip(*[v[2::3] for v in lst]))) 4 lstY = list(map(list, zip(*[v[3::3] for v in lst]))) 5 lstZ = list(map(list, zip(*[v[4::3] for v in lst]))) 6 print([lstX, lstY, lstZ])

投稿2021/11/01 15:24

編集2021/11/01 15:39
lehshell

総合スコア1147

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

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

Purin_Kumamusi

2021/11/02 07:54

回答ありがとうございます。とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問