【问题标题】:join function of a numpy array composed of string由字符串组成的numpy数组的join函数
【发布时间】:2015-08-02 01:04:38
【问题描述】:

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

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

这是一个独立的例子来说明我的问题:

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) 上使用 join 函数可以正常工作,但在等效的 numpy 数组 (binary_split_array) 上却不行:我们可以看到返回的字符串只有 72 个字符长而不是 80。

【问题讨论】:

  • 我找到了另一种方法(我现在应该知道如何使用搜索栏了...)使用tostring() 函数加入。但是知道为什么join 不起作用吗?

标签: python arrays string join numpy


【解决方案1】:

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

print(repr(binary_split_array[0]))    
''

列表中的第一个元素是:

'\x00\x00\x00\x00\x00\x00\x00\x00'

一个空字符串的长度为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]

第8字节str的长度:

print(len('\x00\x00\x00\x00\x00\x00\x00\x00'))
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数组handles空字节与python不同,空字节被截断。

【讨论】:

  • 这很有趣...如果您执行完全相同的操作,但 table 不包含值 0. 它可以工作!这意味着numpy.array() 函数对字符串'0.00' 和'1.00' 的处理方式不同,还是我理解不正确?
  • 似乎这样做 binary = table.tostring() + "\x00\x00\x00\x00\x00\x00\x00\x00" 表现出相同的行为。您可以将x00\x00\x00\x00\x00\x00\x00\x00" 放在字符串中的任何位置,它也会这样做
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 2012-06-14
  • 2017-12-09
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
相关资源
最近更新 更多