连接由字符串组成的numpy数组的函数
我试图在一个由只有字符串(代表二进制浮点数)组成的numpy数组上使用join
函数来获取连接字符串,以便使用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.]
正如你所看到的,使用列表( binary_list
)上的连接函数可以正常工作,但是在等效的numpy数组( binary_split_array
)上它不会:我们可以看到返回的字符串长度只有72个字符,而不是80个。
join_binary_split_array
的第一个元素是一个空字符串:
print(repr(binary_split_array[0]))
''
列表中的第一个元素是:
'x00x00x00x00x00x00x00x00'
一个空字符串的长度为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]
字节str的长度8:
print(len('x00x00x00x00x00x00x00x00'))
8
调用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.]
numpy数组处理空字节与python不同,空字节被截断。
链接地址: http://www.djcxy.com/p/26323.html