「numpy」カテゴリーアーカイブ

関数ndarray.setflagsの使い方の例

関数の機能:配列のフラグを変更する

例 : 書き込み可と不可の切り替え

>>> a = np.array([1, 2])
>>> a.flags.writeable
True                        # 現在は書き込み可能である
>>> a.setflags(write=False) # 書き込み不可に変更
>>> a.flags.writeable
False                       # 書き込み不可に変更されている
>>> a[0] = 10
Traceback (most recent call last):
...
ValueError: assignment destination is read-only
この例のように、書き込み不可に変更してから要素の値を変更しようとするとエラーが発生します。

属性ndarray.shapeの使い方の例

属性の内容:各次元の大きさ

>>> a = np.array([[5, 2],
	          [1, 6]])
>>> a.shape
(2, 2)
>>> b = np.array([[[5, 2, 4],
	           [1, 6, 6]],
	          [[3, 7, 2],
	           [9, 8, 5]]])
>>> b.shape
(2, 2, 3)
関連項目
関数ndarray.ravelの使い方の例
関数ndarray.reshapeの使い方の例
関数ndarray.resizeの使い方の例
関数ndarray.squeezeの使い方の例
関数ndarray.flattenの使い方の例
属性ndarray.ndimの使い方の例
属性ndarray.size, ndarray.itemsize, ndarray.nbyteの使い方の例
属性ndarray.stridesの使い方の例

属性ndarray.ndimの使い方の例

属性の内容:配列の次元

例 : 2次元の配列と3次元の配列

>>> a = np.array([[5, 2],
	          [1, 6]])
>>> a.ndim
2
>>> b = np.array([[[5, 2],
	           [1, 6]],
	          [[3, 7],
	           [9, 8]]])
>>> b.ndim
3
関連項目
関数ndarray.ravelの使い方の例
関数ndarray.reshapeの使い方の例
関数ndarray.resizeの使い方の例
関数ndarray.squeezeの使い方の例
関数ndarray.flattenの使い方の例
属性ndarray.shapeの使い方の例
属性ndarray.size, ndarray.itemsize, ndarray.nbyteの使い方の例
属性ndarray.stridesの使い方の例

関数ndarray.viewの使い方の例

関数の機能:同じデータのビューを返却

例1 : 16ビット整数型の配列のビューを8ビット整数形の配列として作成

>>> a = np.array([1,2], dtype=np.int16)
>>> a_view = a.view(dtype=np.int8)
>>> a_view
array([1, 0, 2, 0], dtype=int8)
>>> a_view[1] = 1
>>> a_view[3] = 2
>>> a_view
array([1, 1, 2, 2], dtype=int8)
>>> a
array([257, 514], dtype=int16)
この例では、16ビット整数型の配列とメモリを共有する8ビット整数型の配列を作っています。配列aは2要素ですが、配列a_viewは1要素のメモリサイズが半分になるので、要素数は2倍の4要素となります。

配列a_viewの要素を書き換えると配列aの要素も変化します。
配列aの1つ目の要素はa_viewの1つ目と2つ目の要素と対応しており、a[0]=a_view[0]+a_view[1]*28の関係となっています。

例2 : 文字列型の配列の短い文字数のビューを作成

>>> a = np.array(['abcd', 'efghij'])
>>> a
array(['abcd', 'efghij'], dtype='<U6')
>>> a_view = a.view(dtype='<U1')
>>> a_view
array(['a', 'b', 'c', 'd', '', '', 'e', 'f', 'g', 'h', 'i', 'j'],
      dtype='<U1')
>>> a_view2 = a.view(dtype='<U2')
>>> a_view2
array(['ab', 'cd', '', 'ef', 'gh', 'ij'], dtype='<U2')
この例では、6文字の文字列型の配列とメモリを共有する、1文字と2文字の文字列型配列をそれぞれ作成しています。

なお下記の様に、元の配列の文字列数を割り切れない文字数を指定してビューを作成しようとするとエラーが発生します。
>>> b = np.array(['abcd', 'efghi'])
>>> b
array(['abcd', 'efghi'], dtype='<U5')
>>> b_view = b.view(dtype='<U2')
Traceback (most recent call last):
  File "<pyshell#92>", line 1, in <module>
    b_view = b.view(dtype='<U2')
ValueError: When changing to a smaller dtype, its size must be a divisor of the size of original dtype
関連項目
関数ndarray.copyの使い方の例
関数ndarray.transposeの使い方の例
属性ndarray.Tの使い方の例
属性ndarray.baseの使い方の例

ndarrayのnp.nanの要素の位置を調べる方法

np.nan同士を比較演算子で比較すると等しくないと評価される性質を利用すれば、配列中のnp.nanの要素の位置を調べる事ができます。
>>> np.nan == np.nan
False
>>> np.nan != np.nan
True
このようにnp.nanとnp.nanは等しくないと評価されます。
>>> a = np.array([5, 3, np.nan, 6, np.nan])
>>> a != a
array([False, False,  True, False,  True])
配列の場合は、同じ配列同士を比較演算子(!=)で比較するとこのような結果になります。数値の入った要素については、同じ数値同士は等しいのでFalse、np.nan同士は等しくないのでTrueとなります。なので、Trueの箇所がnp.nanであるということになります。
np.nanの要素のインデックス値の配列が欲しい場合は、下記の様にnp.arange関数で数列を作り、上記のbool型配列を使ってブーリアンマスクすれば得られます。
>>> np.arange(a.shape[0])[a != a]
array([2, 4])
関連項目
関数numpy.arrayの使い方の例
関数numpy.arangeの使い方の例
属性ndarray.shapeの使い方の例

属性ndarray.stridesの使い方の例

属性の内容:各軸の属する軸を含むサイズ(単位:バイト)

>>> a = np.array([[0, 1, 2],
	          [3, 4, 5]])
>>> a.itemsize
8
>>> a.strides
(24, 8)
この例では、2行3列で1要素のサイズが8byteの配列を作り、strideの属性を調べています。
strideの値は(縦軸(axis=0)、横軸(axis=1))の順に各軸の属する軸を含む1単位のサイズです。
横軸(axis=1)は、他の軸は属さないので、配列の1要素のサイズと同じ8byteとなります。
縦軸(axis=0)には横軸(axis=1)が属すので、1行あたり24byte(=8byte×3要素)となります。
ndarray.stridesの説明図
関連項目
関数ndarray.ravelの使い方の例
関数ndarray.reshapeの使い方の例
関数ndarray.resizeの使い方の例
関数ndarray.squeezeの使い方の例
関数ndarray.flattenの使い方の例
属性ndarray.ndimの使い方の例
属性ndarray.shapeの使い方の例
属性ndarray.size, ndarray.itemsize, ndarray.nbyteの使い方の例

属性ndarray.size, ndarray.itemsize, ndarray.nbyte の使い方の例

属性の内容:
  size     : 配列の要素数
  itemsize : 要素のサイズ(単位:バイト)
  nbyte    : 配列全体のサイズ(単位:バイト)
>>> a = np.array([[1, 2, 3, 4],
	          [5, 6, 7, 8],
	          [9,10,11,12]], dtype=np.float32)
>>> a
array([[ 1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.],
       [ 9., 10., 11., 12.]], dtype=float32)
>>> a.size
12
>>> a.itemsize
4
>>> a.nbytes
48
上記の例では、1要素が4バイトの3行4列(=12要素)の配列を作り、属性を確認しています。
関連項目
関数ndarray.ravelの使い方の例
関数ndarray.reshapeの使い方の例
関数ndarray.resizeの使い方の例
関数ndarray.squeezeの使い方の例
関数ndarray.flattenの使い方の例
属性ndarray.ndimの使い方の例
属性ndarray.shapeの使い方の例
属性ndarray.stridesの使い方の例