29

私が取り組んでいるより広範なプログラムの一部として、文字列、3D 座標などがすべて混在したオブジェクト配列になってしまいました。オブジェクト配列は構造化配列に比べてあまり好まれていないかもしれませんが、多くのコードを変更せずにこれを回避したいと考えています。

私の配列obj_array(N行)のすべての行が次の形式であると仮定しましょう

Single entry/object of obj_array:  ['NAME',[10.0,20.0,30.0],....] 

今、このオブジェクト配列を読み込んで、3D 座標チャンクをスライスしようとしています。ここまでは、 let say for を尋ねるだけですべてうまくいきます。

obj_array[:,[1,2,3]]

ただし、結果もオブジェクト配列であり、float の 2D 配列を次のように形成したいので、問題に直面します。

size [N,3] of N rows and 3 entries of X,Y,Z coordinates

今のところ、問題を回避するために、行をループし、すべての行を目的の 2D flot 配列の行に割り当てています。numpy の配列変換ツールを使用するより良い方法があるかどうか疑問に思っていますか? 私はいくつかのことを試しましたが、それを回避できませんでした。

Centers   = np.zeros([N,3])

for row in range(obj_array.shape[0]):
    Centers[row,:] = obj_array[row,1]

ありがとう

4

8 に答える 8

14

ハイメのおもちゃの例に基づいて、次を使用してこれを非常に簡単に実行できると思いますnp.vstack()

arr = np.array([['one', [1, 2, 3]],['two', [4, 5, 6]]], dtype=np.object)
float_arr = np.vstack(arr[:, 1]).astype(np.float)

これは、オブジェクト配列の「数値」要素が 1D numpy 配列、リスト、またはタプルであるかどうかに関係なく機能します。

于 2013-10-19T22:37:07.760 に答える
5

これは、オブジェクトから浮動小数点数の配列に変換するために、配列 arr でうまく機能します。後の数値処理は非常に簡単です。最後の投稿ありがとうございます!!!! 任意の DataFrame サイズを含めるように変更しました。

float_arr = np.vstack(arr[:, :]).astype(np.float)
于 2016-01-08T21:59:50.837 に答える
1

構造化配列の場合

structured_to_unstructured(arr).astype(np.float)

参照: https://numpy.org/doc/stable/user/basics.rec.html#numpy.lib.recfunctions.structured_to_unstructured

于 2021-05-13T13:32:50.440 に答える