1. ホーム
  2. python

[解決済み] NumPy配列のインプレース型変換

2022-05-26 08:27:02

質問

のNumPy配列が与えられたとき int32 の配列があったとして、それをどのように float32 ? ということで、基本的には、以下のようにしたいと思います。

a = a.astype(numpy.float32)

のように、配列をコピーせずに 大きいです。

このようにする理由は、2つのアルゴリズムで計算された a . そのうちのひとつは int32 の配列を返し、もう一方は float32 の配列を返します (そしてこれは2つの異なるアルゴリズムに固有のものです)。 これ以降のすべての計算では a の配列であると仮定します。 float32 .

現在、私はこの変換を、C の関数で ctypes . Pythonでこれを行う方法はありますか?

どのように解決するのですか?

異なるdtypeのビューを作成し、そのビューにインプレースでコピーすることができます。

import numpy as np
x = np.arange(10, dtype='int32')
y = x.view('float32')
y[:] = x

print(y)

イールド

array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.], dtype=float32)

変換がインプレースであることを示すために、コピーされた から x から y 変更された x :

print(x)

プリント

array([         0, 1065353216, 1073741824, 1077936128, 1082130432,
       1084227584, 1086324736, 1088421888, 1090519040, 1091567616])