Python 更改结构化/记录数组的数据类型

Python 更改结构化/记录数组的数据类型,python,numpy,Python,Numpy,问题1。将列重铸为不同的数据类型时,是首选np.array还是np.astype?我见过使用np.astype的示例,但两者似乎都返回所需的结果(都返回原始数组的副本) Q1:无论是np.array还是np.astype方法,在引擎盖下都以相同的方式执行相同的工作。使用np.astype只需少键入一点,读者更清楚的是,目的是更改数据类型。谢谢!这是令人惊讶的,考虑到Python的禅意。。。“应该有一个——最好只有一个——显而易见的方法来做到这一点。”当我有更多的观点时,我会回来投票。。。 imp

问题1。将列重铸为不同的数据类型时,是首选
np.array
还是
np.astype
?我见过使用
np.astype
的示例,但两者似乎都返回所需的结果(都返回原始数组的副本)


Q1:无论是
np.array
还是
np.astype
方法,在引擎盖下都以相同的方式执行相同的工作。使用
np.astype
只需少键入一点,读者更清楚的是,目的是更改数据类型。

谢谢!这是令人惊讶的,考虑到Python的禅意。。。“应该有一个——最好只有一个——显而易见的方法来做到这一点。”当我有更多的观点时,我会回来投票。。。
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')])
## 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')])