python
import numpy as np import math from numpy import array from numpy import linalg as LA import numpy
txt = np.loadtxt("pos.txt", dtype=str) print(txt)
実行結果
[['0' '-19.366079484550315' '0.0' '807.5509318625355,' '1' '-125.12481820663383' '-8.271080752799351' '807.4946245125766,' '2' '-187.99750090621725' '-94.42628226891544' '467.06023408097906,' '3' '-250.94861874167194' '10.665693027462993' '141.41760720941193,' '6' '86.83109845026942' '8.270964230209326' '807.6067236564637,' '7' '115.90619350736293' '-0.7598077451048937' '451.3555117359048,' '8' '170.29159682047555' '157.58263148915424' '120.22283329800803,' '12' '-27.923920037182512' '9.015201309762475' '1137.8794309094715,' '13' '-19.08898258989477' '-9.076500064621072' '1377.946362353638,' '14' '7.568791168004186' '-88.68190572253998' '1434.545805252384,' '15' '10.688082226965937' '-87.47234619481964' '1565.9340126852685,' '17' '174.18190648472938' '19.187442084579317' '1330.202840331924,' '18' '206.12747135567284' '82.82511526452976' '1064.5806927517028,' '19' '201.1531668956186' '-12.058370542830446' '807.1337630194968,' '25' '-182.95583025343177' '-5.874393749754418' '1336.087328246923,' '26' '-232.43619795111272' '23.483609190467458' '1060.09368346194,' '27' '-247.55216721966744' '-45.356069269410334' '825.6500002608236,']
''を省き以下のような形にしたいです.
[[ 0.00000000e+00 -1.07784731e-01 0.00000000e+00 5.34467328e+02 1.00000000e+00 -8.69184320e+01 -3.12723766e+01 5.44275750e+02 2.00000000e+00 -1.56086607e+02 -8.56866898e+01 2.90261612e+02 3.00000000e+00 -2.31943586e+02 1.75777158e+01 2.91960918e+01 6.00000000e+00 8.80709545e+01 3.12721572e+01 5.24534726e+02 7.00000000e+00 1.46564696e+02 -1.24999012e+02 2.64574310e+02 8.00000000e+00 1.76755871e+02 -1.42499048e+02 5.89798142e+01 1.20000000e+01 1.29430659e+01 5.29321590e+00 6.84659676e+02 1.30000000e+01 1.74517718e+01 -2.37796071e+00 9.20011488e+02 1.40000000e+01 4.53356092e+01 -5.05112412e+01 9.75273102e+02 1.50000000e+01 5.81465511e+01 -3.39452419e+01 1.10484814e+03 1.70000000e+01 1.44770661e+02 4.36276525e+01 8.78531143e+02 1.80000000e+01 1.63237347e+02 1.00367522e+02 6.91725263e+02 1.90000000e+01 1.60579958e+02 2.44391511e+01 5.32922027e+02 2.50000000e+01 -1.10331108e+02 -3.94071405e+01 8.91927989e+02 2.60000000e+01 -1.57001909e+02 -6.78258116e+01 7.18662022e+02 2.70000000e+01 -1.97890179e+02 -1.73602758e+02 5.67705410e+02]
上記のようにするにはどのようにしたら良いのでしょうか?何度もtxtファイルについて質問をしてしまい申し訳ございません.どなたかよろしくお願い致します.
0 -0.10778473072856658 0.0 534.4673276334413 1 -86.91843202417452 -31.272376576945117 544.275749869217 2 -156.08660696664396 -85.68668980088205 290.26161236460837 3 -231.94358572422004 17.577715759547544 29.196091795388043 6 88.07095448061722 31.2721571558353 524.534725679862 7 146.56469571882283 -124.9990118278697 264.5743103785835 8 176.7558706603975 -142.4990483599251 58.97981418193831 12 12.943065925992794 5.29321590110731 684.659675560762 13 17.451771820870427 -2.377960713105807 920.0114879511895 14 45.33560922409042 -50.51124123420235 975.2731015961849 15 58.146551098923084 -33.94524191243286 1104.8481404570057 17 144.7706605463885 43.627652504039325 878.5311426360776 18 163.23734749448406 100.3675217475664 691.7252631104815 19 160.57995782562423 24.43915114407416 532.9220266584131 25 -110.33110775575588 -39.407140457243344 891.9279893575855 26 -157.0019092426122 -67.82581164704341 718.6620220215236 27 -197.8901790721251 -173.60275837044557 567.7054104278092
なぜ dtype=str で読み込んでいるのですか?
すみません,ありがとうございます.
dtype=strをとると,
could not convert string to float: '807.5509318625355,'
となり,スペース区切りの読み込みにはどのようにするべきでしょうか?
回答いただけましたらお願いいたします.
pos.txtにカンマが混在しているようです。スペース区切りならばこれは除去すべきでしょう。
ここまで教えていただくのは無理かと思いますが,カンマの除去はどのようにするべきでしょうか.知識がなく教えいただけたらよろしくお願い致します.
pos.txtは何らかのプログラムで吐いたものですか?そうであるならば、吐き出し側のプログラムに問題があることになります。
もしpos.txtを今後更新する予定が無いのなら、適当なエディタツールを用いてカンマを削除しても良いでしょう。ただしこれは対症療法に過ぎません。
回答ありがとうございます.大変参考になり助かりました.
以下のコードは,数値のみ違う別のファイルなのですが,
txt = np.loadtxt('w1.txt')
#print(type(txt))
print(txt)
#print(txt.dtype)
numpy.set_printoptions(threshold=numpy.inf)
で[[ 0.00000000e+00 -1.07784731e-01 0.00000000e+00 5.34467328e+02
1.00000000e+00 -8.69184320e+01 -3.12723766e+01 5.44275750e+02
2.00000000e+00 -1.56086607e+02 -8.56866898e+01 2.90261612e+02
3.00000000e+00 -2.31943586e+02 1.75777158e+01 2.91960918e+01
6.00000000e+00 8.80709545e+01 3.12721572e+01 5.24534726e+02
7.00000000e+00 1.46564696e+02 -1.24999012e+02 2.64574310e+02
で綺麗になったのですが,数値は違っていますが同じ形式なんです.これはどういったことが考えられるかお分かりになりますか?.
はい,3d-openposeから出力したものになります.
ありがとうごうざいます.エディターツールで削除してみます.
出力のコードを見てみないと何とも言えません。
何かしらバグを埋め込んでいるのかもしれませんし、単にそのように出力する仕様なのかもしれません。
まぁ3d-openposeは触ったことが無いのでコードを見てもアドバイスできるか分からないですが。
これひょっとしてカンマがレコード区切りに使われているんですかね。多分そうですね。
3d-openposeの出力ファイルに記載したのですが,回答いただけましたらよろしくお願い致します.
レコード区切りと言われるものはカンマ区切りとは違うものになるのでしょうか?
何も知らず申し訳ありません.
いわゆる表形式のデータはフィールド区切りとレコード区切りを一つに定めて使います。
- 一般的なCSV形式だとカンマと改行を区切りに使います。
- numpy.loadtxtはデフォルト設定だと空白と改行を区切りに使います。フィールド区切りはキーワード引数で指定可能ですが、私の知る限りではレコード区切りは変更できません。
- ご提示のファイルは、どうやら空白とカンマを区切りに使っているようです。これはちょっとCSVとは呼べないのでは無いでしょうか。