【问题标题】:Removing line breaks from numpy array [duplicate]从numpy数组中删除换行符[重复]
【发布时间】: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.savenp.load 来检索它。 savetxt 的如果是 2d 并且你想要一个文本 csv 样式文件。

标签: python numpy


【解决方案1】:

您的 numpy 数组似乎具有 dtype float 因此它实际上不包含任何新行。我假设您在执行print(name_avg_vector) 之类的操作时看到的是换行符。解决问题的一种方法是编写自己的循环以您想要的格式打印值。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 2019-12-31
    • 1970-01-01
    • 2015-03-01
    • 2012-01-23
    • 1970-01-01
    • 2016-07-13
    • 2023-04-05
    • 2011-11-18
    相关资源
    最近更新 更多