numpy.ndarray()にpythonのlistを渡してndarrayを初期化する場合、実はリストの最大長さは32に制限されている。

>>> import numpy as np
>>> np.ndarray([0]*32)
array([], shape=(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), dtype=float64)

>>> np.ndarray([0]*33)
Traceback (most recent call last):
  File "", line 1, in 
ValueError: sequence too large; cannot be greater than 32

それ以上に大きな要素を持つ配列を初期化したければ、numpy.zerosやnumpy.emptyで希望のサイズで初期化した後、[:]で全要素選択、リストを代入すれば良い。

>>> a = [1]*33
>>> b = np.empty((len(a)))
>>> a
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> b
array([  7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   7.68068674e-315,
         7.68068674e-315,   7.68068674e-315,   2.30576063e-310])
>>> b[:] = a
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.]) 

多次元リストの場合も同様:

>>> b = np.empty((len(a), len(a[0]))
>>> b[:] = a

関連記事

fitbitの睡眠スコアを90弱で安定させる良い睡眠を続ける簡単な方法

m1 ipad pro 12.9 2021のusb-cハブはコレがベスト

Time Machine不要!Macを11.2.3にダウングレードして原神をm1 macbook airでプレイする

MH-Z19CとM5StickCで二酸化炭素濃度モニタリング

【神軽量HMD】Avegant Glyph 改造: 瓶詰堂さんのaltglyphを作った

PC、iPad、Android、switchもドックいらず!あまりに万能なusb-cハブが最強だった

コメント

コメントを返信する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です