连接由字符串组成的numpy数组的函数

Tho*_*ard 7 python arrays string join numpy

我正在尝试join在仅由字符串组成的numpy数组(表示二进制浮点数)上使用该numpy.fromstring函数来获取连接的字符串以便使用该函数,但该join函数似乎无法正常工作.

知道为什么吗?我可以使用哪种替代功能来做到这一点?

这是一个显示我的问题的独立示例:

import numpy as np

nb_el = 10

table = np.arange(nb_el, dtype='float64')
print table

binary = table.tostring()

binary_list = map(''.join, zip(*[iter(binary)] * table.dtype.itemsize))
print 'len binary list :', len(binary_list)
# len binary list : 10

join_binary_list = ''.join(binary_list)
print np.fromstring(join_binary_list, dtype='float64')
# [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]

binary_split_array = np.array(binary_list)
print 'nb el :', binary_split_array.shape
# nb el : (10,)
print 'nb_el * size :', binary_split_array.shape[0] * binary_split_array.dtype.itemsize
# nb_el * size : 80

join_binary_split_array = ''.join(binary_split_array)
print 'len binary array :', len(join_binary_split_array)
# len binary array : 72

table_fromstring = np.fromstring(join_binary_split_array, dtype='float64')
print table_fromstring
# [ 1.  2.  3.  4.  5.  6.  7.  8.  9.]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,使用list(binary_list)上的join函数可以正常工作,但是在等效的numpy数组(binary_split_array)上它没有:我们可以看到返回的字符串只有72个字符而不是80个字符.

Pad*_*ham 3

你的第一个元素join_binary_split_array是一个空字符串:

print(repr(binary_split_array[0]))    
''
Run Code Online (Sandbox Code Playgroud)

列表中的第一个元素是:

'\x00\x00\x00\x00\x00\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

空字符串的长度为 0:

print([len("".join(a)) for a in binary_split_array])
print([len("".join(a)) for a in binary_list])
[0, 8, 8, 8, 8, 8, 8, 8, 8, 8]
[8, 8, 8, 8, 8, 8, 8, 8, 8, 8]
Run Code Online (Sandbox Code Playgroud)

字节 8 的 str 的长度:

print(len('\x00\x00\x00\x00\x00\x00\x00\x00'))
8
Run Code Online (Sandbox Code Playgroud)

调用 tobytes 将给出与列表相同的输出长度:

print(len(binary_split_array.tobytes()))
80

table_fromstring = np.fromstring(binary_split_array.tobytes(), dtype='float64')

print table_fromstring
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]
Run Code Online (Sandbox Code Playgroud)

numpy 数组处理空字节的方式与 python 不同,空字节会被截断。