我将不胜感激,请:)
我正在尝试从1d字符串数组和2d数字数组创建一个记录数组(因此我可以使用np.savetxt并将其转储到文件中)。不幸的是,这些文档没有提供足够的信息:np.core.records.fromarrays
>>> import numpy as np
>>> x = ['a', 'b', 'c']
>>> y = np.arange(9).reshape((3,3))
>>> print x
['a', 'b', 'c']
>>> print y
[[0 1 2]
[3 4 5]
[6 7 8]]
>>> records = np.core.records.fromarrays([x,y])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/numpy/core/records.py", line 560, in fromarrays
raise ValueError, "array-shape mismatch in array %d" % k
ValueError: array-shape mismatch in array 1
我需要的输出是:
[['a', 0, 1, 2]
['b', 3, 4, 5]
['c', 6, 7, 8]]
如果您只想转储x
并保存y
到CSV文件,则无需使用recarray。但是,如果您还有其他原因想要使用rearray,可以按以下方法创建它:
import numpy as np
import numpy.lib.recfunctions as recfunctions
x = np.array(['a', 'b', 'c'], dtype=[('x', '|S1')])
y = np.arange(9).reshape((3,3))
y = y.view([('', y.dtype)]*3)
z = recfunctions.merge_arrays([x, y], flatten=True)
# [('a', 0, 1, 2) ('b', 3, 4, 5) ('c', 6, 7, 8)]
np.savetxt('/tmp/out', z, fmt='%s')
写
a 0 1 2
b 3 4 5
c 6 7 8
到/tmp/out
。
另外,要使用它,np.core.records.fromarrays
您需要分别列出每一列y
,因此fromarrays
,如文档所说,传递给的输入是“数组的平面列表”。
x = ['a', 'b', 'c']
y = np.arange(9).reshape((3,3))
z = np.core.records.fromarrays([x] + [y[:,i] for i in range(y.shape[1])])
传递给的列表中的每一项fromarrays
将成为结果Recarray的一列。您可以通过检查源代码来查看:
_array = recarray(shape, descr)
# populate the record array (makes a copy)
for i in range(len(arrayList)):
_array[_names[i]] = arrayList[i]
return _array
顺便说一句,您可能想在这里使用pandas来获得额外的便利(不必乱用dtype,变平或迭代所需的列):
import numpy as np
import pandas as pd
x = ['a', 'b', 'c']
y = np.arange(9).reshape((3,3))
df = pd.DataFrame(y)
df['x'] = x
print(df)
# 0 1 2 x
# 0 0 1 2 a
# 1 3 4 5 b
# 2 6 7 8 c
df.to_csv('/tmp/out')
# ,0,1,2,x
# 0,0,1,2,a
# 1,3,4,5,b
# 2,6,7,8,c
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句