アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【Python
【Python】numpy配列操作メモ
POSTED BY
2021-07-03

Pythonで非常によく使うnumpyであるが、標準ライブラリではないので日本語マニュアルが無い。

https://numpy.org/doc/1.20/reference/index.html

色々使い方を個人的メモ。

多次元配列ndarrayを定義

import numpy as np

# 要素数2, 列数3
rows=2
dimensions=3

testnd = np.ndarray((rows, dimensions), dtype=np.float32)

print(testnd)

[[ 1.7192275e+17 -1.0050079e+00 -2.2687415e-02]
 [ 9.8258573e-01 -1.9677646e+02 -1.2648886e+00]]

正規分布(任意の平均、標準偏差)配列を作成

numpy.random.normal(loc=0.0, scale=1.0, size=None)

平均loc、標準偏差scaleの正規分布に従う乱数を返す。sizeはタプル(n,n)で渡すか一次元整数nを渡す。

import numpy as np

# 要素数2, 列数3
rows=2
dimensions=3

testnd = np.ndarray((rows, dimensions), dtype=np.float32)
print(testnd)

testnd[0] = np.random.normal(0, 0.02, dimensions)
testnd[1] = np.random.normal(0, 0.02, dimensions)

print(testnd)

[[-1.4734161e+31 -1.0421840e+00 -1.3667449e+12]
 [-1.1129732e+00  1.2969308e-11 -1.1707213e+00]]
[[-0.01001532  0.00063172 -0.03122339]
 [-0.00231102 -0.03439134 -0.00414465]]

文字列の配列を格納する

dtype=np.strではなくdtype=np.objectを使う模様。

import numpy as np

# 要素数2, 列数3
rows=2
dimensions=3

testnd = np.ndarray((rows, dimensions), dtype=np.object)
testnd[0] = ("aaa", "えーえーえー", "あああ")
print(testnd)
testnd[0][1] += "です"
print(testnd)

[['aaa' 'えーえーえー' 'あああ']
 [None None None]]
[['aaa' 'えーえーえーです' 'あああ']
 [None None None]]

次元を保ったまま要素を追加する

axisを使う。axis=0で行として追加、axis=1で列として追加。
元の配列はそのまま、新しい配列を返すので、不要なら元配列に戻り値を代入する。

import numpy as np

# 要素数2, 列数3
rows=2
dimensions=3

testnd = np.ndarray((rows, dimensions), dtype=np.object)
testnd[0] = ("aaa", "えーえーえー", "あああ")
print(testnd)

instnd = np.ndarray((rows, dimensions), dtype=np.object)
instnd[0] = ("uuu", "ゆーゆーゆー", "ううう")
print(instnd)

#行として追加
madend = np.append(testnd, instnd, axis=0)
print(madend)

#列として追加
madend = np.append(testnd, instnd, axis=1)
print(madend)

[['aaa' 'えーえーえー' 'あああ']
 [None None None]]
[['aaa' 'えーえーえーです' 'あああ']
 [None None None]]
[['aaa' 'えーえーえー' 'あああ']
 [None None None]]
[['uuu' 'ゆーゆーゆー' 'ううう']
 [None None None]]
[['aaa' 'えーえーえー' 'あああ']
 [None None None]
 ['uuu' 'ゆーゆーゆー' 'ううう']
 [None None None]]
[['aaa' 'えーえーえー' 'あああ' 'uuu' 'ゆーゆーゆー' 'ううう']
 [None None None None None None]]

配列要素へのループ代入を1行で行う

Python独特の表現でかなりわかりづらいがよく見かける。

import numpy as np

# 要素数2, 列数3
rows=2
dimensions=3

testnd = np.ndarray((rows, dimensions), dtype=np.object)
testnd[0] = ("aaa", "えーえーえー", "あああ")
print(testnd)

sepstr = "でぃす いず あ ぺん"
separr = sepstr.split(" ")
print(separr)

testnd[1] = [str(sepobj) for sepobj in separr[1:]]

print(testnd)

[['aaa' 'えーえーえー' 'あああ']
 [None None None]]
['でぃす', 'いず', 'あ', 'ぺん']
[['aaa' 'えーえーえー' 'あああ']
 ['いず' 'あ' 'ぺん']]

半角スペースで分割されたsepstrの2要素目~4要素目を配列2番目の要素(3次元)へ1行で代入。
カッコの中でfor文を表現する。1:は、取り出し配列インデックス1(2番目)から始めよ、という意味。
strへのキャストは必要ないが一応つけている。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【webmaster/管理人】
自営業プログラマー
ご連絡は以下アドレスまで★

☆お仲間ブログ1↓
匠のコーヒーブレイク
☆お仲間ブログ2↓
一人社長の不動産業務日誌
【キーワード検索】