我有一个来自阅读csv文件的recarray
。我有兴趣将列的子集转换为连续的浮点数组。我想避免将它们转换为列表或逐个堆叠它们。
我尝试了https://stackoverflow.com/a/11792956和https://stackoverflow.com/a/7842620中的建议,但我得到了
ValueError:新类型与数组不兼容。
这是我的代码:
a = np.recfromcsv(r"myfile.csv")
#a has many columns of type int, float or string. I want to extract those called coeff*
coeffs_columns = [n for n in a.dtype.names if n.startswith('coeff')]
coeffs_recarray = a[coeffs_columns]
newtype=[(n,'<f8') for n in coeffs_columns]
b = coeffs_recarray.astype(newtype)
#b is:
#array((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=[('coefficients00', '<f8'), ('coefficients1', '<f8'), ('coefficients2', '<f8'), ('coefficients3', '<f8'), ('coefficients4', '<f8'), ('coefficients5', '<f8'), ('coefficients6', '<f8'), ('coefficients7', '<f8'), ('coefficients8', '<f8'), ('coefficients9', '<f8'), ('coefficients100', '<f8'), ('coefficients11', '<f8'), ('coefficients12', '<f8'), ('coefficients13', '<f8'), ('coefficients14', '<f8')])
coeffs = b.view('<f8')
“有趣”的是,如果我只提取一列,或者我使用recarray
创建的
x = np.array([(1.0, 2,7.0), (3.0, 4, 9.9)],
dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8')])
转换有效。
答案 0 :(得分:3)
Numpy提供numpy.ascontiguousarray。
此函数返回其输入数组的内存(C顺序)中的连续数组。在处理数组上的非连续视图时,这尤其有用。
如果需要Fortran订单,请使用numpy.asfortranarray。