1
Q1。別のデータ型に列を再作成する場合、np.array
またはnp.astype
が優先されますか?私はnp.astype
を使用している例を見てきましたが、両方とも希望の結果(元の配列の両方のリターンコピー)を返すようです。構造化/レコード配列のdtypeを変更する
import numpy as np
## recasting string to integer
x = np.rec.array([('a','1'),('b','2')],names='col1,col2')
##
In []: x
Out[]:
rec.array([('a', '1'), ('b', '2')],
dtype=[('col1', '|S1'), ('col2', '|S1')])
##
dt = x.dtype.descr
dt[1] = (dt[1][0],'int')
## which is more appropriate:
y = np.array(x,dtype=dt)
## or
y = x.astype(dt)
## ?
In []: y
Out[]:
rec.array([('a', 1), ('b', 2)],
dtype=[('col1', '|S1'), ('col2', '<i4')])
Q2。列名の変更:整数列はnp.array
を呼び出すとゼロになりますが、値はnp.rec.array
のままです。どうして?私の理解では、前者では、構造化配列を取得し、後者はレコード配列を返します。ほとんどの目的のために私は彼らが同じだと思った。とにかく、この行動は驚くべきことです。
## rename 2nd column from col2 to v2
dt = copy.deepcopy(y.dtype)
names = list(dt.names)
names[1] = 'v2'
dt.names = names
## this is not right
newy = np.array(y,dtype=dt)
In []: newy
Out[]:
array([('a', 0), ('b', 0)],
dtype=[('col1', '|S1'), ('v2', '<i4')])
## this is correct
newy = np.rec.array(y,dtype=dt)
In []: newy
Out[]:
rec.array([('a', 1), ('b', 2)],
dtype=[('col1', '|S1'), ('v2', '<i4')])
ありがとうございました! PythonのZenを考えると、それは驚くべきことです...「それを行うには、1つしかなく、好ましくは1つの明白な方法が必要です。」私がポイントを増やすと、私は戻ってupvoteになります... – hatmatrix