LoginSignup
1
3

More than 5 years have passed since last update.

Python2 / numpy > ファイルの特定の列だけを別のファイルの列データで置き換える > numpy.c_を教えていただきました

Last updated at Posted at 2017-05-03
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
GNU bash, version 4.3.8(1)-release (x86_64-pc-linux-gnu)

Python2の環境で実行。

ファイル構成

input.tab

tab区切りのファイル。

x y z E v1 v2
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6

result.csv

3, 1, 4, 1, 5
3, 1, 4, 1, 5
3, 1, 4, 1, 5

x,y,z,v1,v2の値を格納しているとする。

output.tab

以下のファイルを作りたい。

x y z E v1 v2
3.000 1.000 4.000 4.000 1.000 5.000 
3.000 1.000 4.000 4.000 1.000 5.000 
3.000 1.000 4.000 4.000 1.000 5.000 
  • E以外の値をresult.csvの値で置き換えたい
  • 少数桁数は任意

code v0.1

Python3で使う*がPython2では使えない。
色々試して以下のベタ書きになってしまった。

merge_170503.py
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import numpy as np

tabdat = np.genfromtxt('input.tab', delimiter=' ')
csvdat = np.genfromtxt('result.csv', delimiter=',')

for aline in zip(tabdat[1:], csvdat):  # 1:skip title line
    for idx in range(0, 3):
        print("%.3f" % aline[1][idx], end=' ')
    print("%.3f" % aline[0][3], end=' ')
    for idx in range(3, 5):
        print("%.3f" % aline[1][idx], end=' ')
    print()

$ python merge_170503.py 
3.000 1.000 4.000 4.000 1.000 5.000 
3.000 1.000 4.000 4.000 1.000 5.000 
3.000 1.000 4.000 4.000 1.000 5.000 

Python3で実行しようとすると以下の問題になる。環境整備を考えないといけない。

No module named numpy

教えていただいた事項

@shiracamus さんのコメントにてnumpy.c_を使ったすっきりしたコードを紹介いただきました。

情報感謝です。
https://docs.scipy.org/doc/numpy/reference/generated/numpy.c_.html

numpy.c_で検索すると、Qiitaの記事も見つかりました。
Numpyで行列の連結
NumPy の配列操作 (2)

1
3
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3