PR

【Python】後から配列の要素を足すために空の配列が欲しい場合

How-to-create-an-empty-array-with-list-and-numpy-eyecatch

 今回は、Pythonのちょっとしたテクニックについてご紹介します。
よく設定ファイルなんかのテキストデータを使って、
アプリケーションの自由度をあげる場合ってありますよね?

 その場合、例えば設定ファイルに書いてある数字に合わせて
メインプログラムの構成を可変にしておく必要があったりします。

 具体的には、設定ファイルに記載した内容を
いったん読み込んでそのパラメータでアプリケーションを動かします。
例えばこんな設定ファイルがあったとします。

PosXY
00100
11080
24090
390110
設定ファイルのイメージ

 X,Y方向の座標をPosという名前でナンバリングしています。
ステージなんかを動かす時のパラメータをイメージしています。

 では、この設定ファイルはPos3まであるので、
アプリケーション側で読み込むときは4行目まで読み込めば足りますね。
ただし….Posが増えた場合にソースコード上の4を5に変えていったりしますか??
という話ですね。そんなソースコードにすることは通常ありえません。

 そんな時に使えるのが「空(から)の配列」です。
大きさを決めていない空の配列にどんどん値を追加することで、
設定ファイルの記載内容に応じて大きさが可変になります。
そんな空の配列についてご紹介していきます。

この記事を読むことでわかること

後から大きさ変更可能な、空の配列の作り方がわかる。

自己紹介

サラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

注意

本ブログはアフィリエイトを用いた広告を掲載しています。

空の配列を使ってやりたいこと

 やりたいことのおさらいですが、
Pythonを使った配列で、最初に要素の数を指定せず
後から要素を追加していくことになります。

 よく配列の初期化なんて呼ばれることもあります。
標準のListの場合、numpyの場合でそれぞれ違います。
実は、ここで重要なのですが、numpyの場合
空の配列(ndarray)は作成できません。

 重要なお話でしたので先にお伝えしておきました。
それでは、Listの場合、numpyの場合それぞれで空の配列の作成
(配列の初期化)をやっていきましょう。

Python標準のListで空の配列を作る方法。

 まずはPython標準のListで空の配列を作ってみましょう。
Python標準と表現しているのは、pipを使ってモジュールをインストールする
必要が無く、初期状態から使えることを意味しています。

 このListで空の配列を定義するには、こうなります。

testList = []

 今回、空の配列の名前はtestListとしました。
このように、[]とするだけで、空の配列として定義することができます。簡単ですね。

 試しに値を入れてみましょう。
testListに3個要素数を追加してみます。
要素の追加はappendを使用します。

testList = []
testList.append(3)
print(testList)

 このようにすることで、最後のprintのときに[3]が出てくるのが確認できると思います。
注意点としては、この3は、数字の3が配列として入っているわけではなく、
「要素が3個」という意味です。
ぱっと見だと3という数字が入っていると勘違いすることもあるので、注意が必要です。

numpyで空の配列を作る方法?無いので別の方法を紹介。

 少し前のところでお伝えした通り、
残念ながらnumpyの配列を初期化して空の配列を作ることはできません。

 numpyの配列は、ndarrayという名前ですが、
このndarrayの初期化には要素数が必要です。
要素数を指定しないで空の状態で作りたくても作れません。

 実は、numpyには配列の初期化として、
ゼロ埋めや、1埋め、任意の値で埋めたりする機能はあります。
しかし、それぞれの機能で必ず要素数は指定する必要があります。

 例えば、emptyを使って初期化するとき。
numpy.empty()で初期化← 一見すると、list = []と似たように見えますよね?
ただし、引数には配列のshape。いわゆる行・列の要素数を指定する必要があります。

 実際numpy.empty()とするとエラーになります。引数が足りないからですね。

ただのempty()だと引数が足りないためエラーとなる。

numpyで空の配列が作れないので、Listから変換する。

 numpyで空の配列が作れないことは先ほどお伝えしました。
ですので、numpyでは初期化せずに、Listで初期化して、
要素が確定したところでnumpyの配列に変換してあげる方法がいいと思います。

 例えば、ソースコード上で要素数を指定せずに、
設定ファイルの要素数で可変にする場合は、こんな感じになります。

import numpy 

testEmpty = []
testEmpty.append(5)
np_array = numpy.ndarray(testEmpty)
print(np_array)

 testEmptyというListが空のリストです。
この中に5個要素を.appendで追加しています。

 この5という数字は、外部から読み込んだ設定ファイル(.csvでも.txtでも。)から
取得すればいいので可変です。

 最後にtestEmptyというListをnumpyで使えるように
ndarrayに変換しています。

今回のまとめ:空の配列を作るには[]で指定すればOK

 今回は、空の配列の設定の方法について解説してみました。
要素数がいつも変わらないようなデータを取り扱う場合は固定の数でいいわけですが、
実務上そんなことはまれだと思います。

 それに、途中で必要な要素数が変更になったくらいで、
ソースコードをいじるのはあまり上手ではないですよね。
そこは設定ファイルをいじるだけで対応したほうがスマートです。

 C++やC#などのコンパイル⇒実行ファイルとして、
実行ファイルを使うような環境だと、毎回コンパイルするのは時間の無駄ですから…
それにソースコードを誰でもいじれるわけではなくても、
設定ファイルくらいならいじれる人ならいますからね。

 要素数が不確定の場合はぜひこの初期化で、
空の配列を作ってみてください。便利さがわかると思います。

コメント

タイトルとURLをコピーしました