【发布时间】:2020-02-08 09:28:29
【问题描述】:
我有一个函数可以计算由多个单词组成的每个名称的平均向量,该函数返回 numpy.ndarray,形状为 (100,)。得到的向量如下:
[ 0.00127441 0.0002633 0.00039622 0.00055501 0.00070984 -0.00089766
-0.00073814 -0.00224919 0.00233035 -0.00037628 0.00125402 -0.00052623
0.00114087 -0.00070441 -0.00419099 0.00031204 -0.0002703 -0.00290918
...(13 lines)
0.00260704 -0.00000406 -0.00160876 0.00134342]
在收到 numpy 数组后,我将删除换行符,如下所示:
temp = ["%.8f" % number for number in name_avg_vector]
temp=re.sub('\s+', ' ', temp)
name_avg_vector= np.array(list(temp))
但我收到以下错误:
---> 79 temp=re.sub('\s+', ' ', name_avg_vector)
TypeError: cannot use a string pattern on a bytes-like object
我也尝试更改打印选项,但我继续在存储 numpy 数组值的文件中使用换行符:
import sys
np.set_printoptions(threshold=sys.maxsize)
np.set_printoptions(threshold=np.inf)
之后,我尝试使用 array_repr 删除断线:
name_avg_vector = np.array_repr(name_avg_vector).replace('\n', '')
但它保存为:
['array([-0.00849786, 0.00113221, -0.00643946, 0.00437448, -0.00740928, 0.00381133, 0.00178376, -0.00065115, -0.00050142, -0.0001178 , 0.00029183, 0.00015484, -0.00001569, 0.0006973 , 0.00051486, 0.00006652, -0.00099618, -0.00049231, 0.0003479 , 0.00135821, 0.00078396, 0.00038927, 0.00040825, -0.00093267, 0.00025755, -0.00012063, -0.00074733, 0.00120466, 0.00041425, -0.00062592, 0.00098112, 0.00101578, -0.00048335, 0.00079251, -0.00112981,
...
-0.00050014, 0.00133685, -0.00020537, -0.00082505])']
正如 Anoyz 在here 中所说,转换为列表可以消除诸如name_avg_vector.tolist() 之类的断行。
谢谢
【问题讨论】:
-
您要删除哪些换行符?你在哪里看到这些?您的 numpy 数组实际上不包含任何换行符。 Numpy 仅在显示数组时生成换行符。
-
例如,第一个发布的数组内容包括:
0.00127441 0.0002633 0.00039622 0.00055501 0.00070984 -0.00089766其中在-0.00089766 之后有一个\n用于拆分行,每6 个浮点数,数组被拆分到下一行。我读的是默认linewidth=75,这个数组的形状是(100,) -
"在 -0.00089766 之后有一个 \n 来分割行" 因此,当您 显示 具有类似
print(name_avg_vector)的数组时会有换行符。这不是存储在数组中的数据。 -
我认为它是数据本身,因为它与文件中的断线一起存储。后来当我申请
np.array_repr()时,断线消失了,但添加了图例'array(..。 -
你是如何“接收”和处理这个“数组”的?听起来您正在尝试使用数组的字符串表示形式,而不是数组本身。很难从它的打印字符串重新创建一个数组 - 带有那些换行符、空格和省略号。您应该尝试使用数组对象本身。如果您需要将其保存到文件中,请使用
np.save和np.load来检索它。savetxt的如果是 2d 并且你想要一个文本csv样式文件。