python3,numpy1.10
让我们说,我有类似
的东西 some_array = ['a', 'b', 'c']
bool_array = numpy.array([False for x in range(len(parts_array))], dtype='bool_')
然后bool_array
将为[False, False, False]
并且bool
类型。
当我这样做的时候
another_array = numpy.column_stack((some_array, bool_array))
,这两种类型都成为str
,我不想这样做。
我想要的是在第二列中保留bool
类型。我不在乎第一栏的类型。
我需要创建另一个数组吗?似乎解决方案是通过structured arrays中的dtype
,但我不想复制column_stack()
生成的整个数组。
答案 0 :(得分:0)
我认为你不能在一个numpy数组中拥有多种数据类型。例如,如果你有
,你可能想尝试一个pandas数据框 some_array=['a','b','c']
bool_array=[False, False, Fale]
您可以定义数据框
df=pd.DataFrame(bool_array, index=some_array.tolist(), columns=[1])
这就像
1
a False
b False
c False
bool_array将保留其类型,但您必须使用数据框操作来访问和操作它
答案 1 :(得分:0)
有两种(主要)方法可以将值添加到结构化数组中 - 使用元组列表或将值复制到每个字段。
e.g。按字段:
In [368]: arr=np.zeros((3,),dtype='S10,bool')
In [369]: arr
Out[369]:
array([(b'', False), (b'', False), (b'', False)],
dtype=[('f0', 'S10'), ('f1', '?')])
In [371]: arr['f0']=['one','two','three']
In [372]: arr['f1']=[True,False,True]
In [373]: arr
Out[373]:
array([(b'one', True), (b'two', False), (b'three', True)],
dtype=[('f0', 'S10'), ('f1', '?')])
如果您有一个子列表列表,则需要将子列表转换为元组:
In [378]: alist=[['one',True],['two',False],['three',True]]
In [379]: np.array([tuple(i) for i in alist], dtype=arr.dtype)
Out[379]:
array([(b'one', True), (b'two', False), (b'three', True)],
dtype=[('f0', 'S10'), ('f1', '?')])
column_stack
作为中间数组无效,因为它丢失了原始列dtypes。
您还可以在from numpy.lib import recfunctions
中探索功能。该模块具有合并数组的功能。但是我看过的那些使用了字段复制方法,所以它们不会节省任何时间。
In [381]: recfunctions.merge_arrays([['one','two','three'],[False,True,False]])
Out[381]:
array([('one', False), ('two', True), ('three', False)],
dtype=[('f0', '<U5'), ('f1', '?')])