从numpy列堆栈的末尾删除dtype

时间:2016-01-20 13:54:58

标签: python numpy

我有两个清单:

secondary_data = np.column_stack((user_secondary,_id_secondary))
primary_data = np.column_stack((user_primary,_id_primary))

接收另外两个列表。当我使用以下命令输出列表之间的差异时:

[x for x in secondary_data if x not in primary_data] + [x for x in primary_data if x not in secondary_data]

或以下命令:

filter(lambda x: x not in primary_data, secondary_data) + filter(lambda x: x not in primary_data, secondary_data)

我得到以下值:

[array(['id5', 'value'], 
  dtype='|S32')]

有没有办法让它只输出数组:

['id5', 'value']

谢谢!

3 个答案:

答案 0 :(得分:0)

IIUC您可以使用numpy.ndarray的{​​{3}}方法:

import numpy as np
a = [np.array(['id5', 'value'], dtype='|S32')]

result = a[0].tolist()

print(result)
[b'id5', b'value']

我正在使用python 3,因此在这种情况下我可以将字节转换为字符串:

result2 = list(map(bytes.decode, a[0].tolist()))

print(result2)
['id5', 'value']

答案 1 :(得分:0)

我明白了。这是一种方法:

p0_1 = [x for x in primary_data if x not in secondary_data]
p1_1 = ' '.join(map(str, p0_1))

答案 2 :(得分:0)

您是否担心可以在其他代码或显示屏中使用的值?

dtype包含在repr显示中,但不在str显示中:

In [642]: x=np.ones((2,3),dtype='i,S4')
In [643]: x
Out[643]: 
array([[(1, '1'), (1, '1'), (1, '1')],
       [(1, '1'), (1, '1'), (1, '1')]], 
      dtype=[('f0', '<i4'), ('f1', '<S4')])
In [644]: print(x)
[[(1, '1') (1, '1') (1, '1')]
 [(1, '1') (1, '1') (1, '1')]]
In [645]: print(str(x))
[[(1, '1') (1, '1') (1, '1')]
 [(1, '1') (1, '1') (1, '1')]]

tolist将数组转换为列表。在这种情况下,元组列表:

In [646]: x.tolist()
Out[646]: [[(1, '1'), (1, '1'), (1, '1')], [(1, '1'), (1, '1'), (1, '1')]]