Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按值拆分字符串类型数组_Python_Arrays_Numpy - Fatal编程技术网

Python 如何按值拆分字符串类型数组

Python 如何按值拆分字符串类型数组,python,arrays,numpy,Python,Arrays,Numpy,假设我得到了一个str数组: ['12.5', '7', '45', '\n', '13.7', '52', '34.3', '\n'] 我想按值分割它,在本例中是按'\n',所以它变成: [['12.5', '7', '45'], ['13.7', '52', '34.3']] 我不想枚举每一个元素,因为当输入具有较大规模时,这很耗时。因此,我想知道是否有一些函数或python技巧可以轻松实现这一点 附言 我看过了,但没什么用。主要是因为我不太了解np.where()如何与np.spl

假设我得到了一个
str
数组:

['12.5', '7', '45', '\n', '13.7', '52', '34.3', '\n']
我想按值分割它,在本例中是按
'\n'
,所以它变成:

[['12.5',  '7', '45'],
 ['13.7', '52', '34.3']]
我不想枚举每一个元素,因为当输入具有较大规模时,这很耗时。因此,我想知道是否有一些函数或python技巧可以轻松实现这一点

附言

我看过了,但没什么用。主要是因为我不太了解
np.where()
如何与
np.split()
一起工作,还因为我正在处理
str
类型

另一件可能有用的事情是,我的最终目标是生成一个数字矩阵(可能是
float
type),所以我也很高兴知道是否有任何numpy函数可以做到这一点

当然,您可以使用它来迭代列表,但它是高度优化的:

from itertools import groupby

l = ['12.5', '7', '45', '\n', '13.7', '52', '34.3', '\n']

[list(g) for k, g in groupby(lst, '\n'.__eq__) if not k]
# [['12.5', '7', '45'], ['13.7', '52', '34.3']]
或者,使用浮点转换:

[list(map(float, g)) for k, g in groupby(lst, '\n'.__eq__) if not k]
# [[12.5, 7.0, 45.0], [13.7, 52.0, 34.3]]
当然,您可以使用它来迭代列表,但它是高度优化的:

from itertools import groupby

l = ['12.5', '7', '45', '\n', '13.7', '52', '34.3', '\n']

[list(g) for k, g in groupby(lst, '\n'.__eq__) if not k]
# [['12.5', '7', '45'], ['13.7', '52', '34.3']]
或者,使用浮点转换:

[list(map(float, g)) for k, g in groupby(lst, '\n'.__eq__) if not k]
# [[12.5, 7.0, 45.0], [13.7, 52.0, 34.3]]

我曾经为此做过一件事。模块。它的工作原理类似于
str.split

pip install chunking
然后


还有
分块。iter\u split
,这是它的一个生成器变体。

我曾经为此做过一件事。模块。它的工作原理类似于
str.split

pip install chunking
然后


还有
chunking.iter\u split
,这是它的一个生成器变体。

使用
numpy

rows = np.split(z, np.where(arr == '\n')[0] + 1)[:-1]
mat = np.array(rows).astype(np.float)

或者,如果我们确定要处理一个矩阵,您可以简单地搜索第一个出现的
'\n'
,然后使用该矩阵进行重塑和切片

first = np.argmax(arr == '\n')
mat = arr.reshape(-1, first + 1)[:, 0:first].astype(np.float)

这个可能会更快。

使用
numpy

rows = np.split(z, np.where(arr == '\n')[0] + 1)[:-1]
mat = np.array(rows).astype(np.float)

或者,如果我们确定要处理一个矩阵,您可以简单地搜索第一个出现的
'\n'
,然后使用该矩阵进行重塑和切片

first = np.argmax(arr == '\n')
mat = arr.reshape(-1, first + 1)[:, 0:first].astype(np.float)

这个可能会更快。

即使您不想使用循环来迭代元素,并且您更喜欢使用“一些可以轻松实现这一点的函数或python技巧”,您正在寻找的这些工具也将使用循环。那么为什么不自己使用一个来完成这样一个基本的操作呢?@IMCoins我从一些课程中学到很多软件包都使用GPU计算矩阵,这比我自己用一些显式的
for
循环来实现要快。@Amarthāl不幸的是,大多数这样做的软件包都是第三方软件包,循环通常是最好的选择,因为它是用C实现的。@Cᴏʟᴅsᴘᴇᴇᴅ 嗯,在实现矩阵计算时,我发现
numpy
函数比我自己编写的运算要快得多。所以我真的希望
numpy
能再次拯救我。现在看来您是对的,下面的答案仍然使用
for
loopsEven如果您不想使用循环来迭代元素,并且您更喜欢使用“一些可以轻松实现这一点的函数或python技巧”,那么您正在寻找的这些工具将使用循环。那么为什么不自己使用一个来完成这样一个基本的操作呢?@IMCoins我从一些课程中学到很多软件包都使用GPU计算矩阵,这比我自己用一些显式的
for
循环来实现要快。@Amarthāl不幸的是,大多数这样做的软件包都是第三方软件包,循环通常是最好的选择,因为它是用C实现的。@Cᴏʟᴅsᴘᴇᴇᴅ 嗯,在实现矩阵计算时,我发现
numpy
函数比我自己编写的运算要快得多。所以我真的希望
numpy
能再次拯救我。现在看来你是对的,下面的答案仍然在使用
来实现
循环。相反,你也可以使用
pandas
来实现类似的功能。或者
[列表(g)用于k,g在groupby(lst),\n.\uu eq_uuuuu)如果不是k]
@Kasramvd非常好的一点。更新了我的答案。对于初学者来说可能不太明显,但绝对值得避免使用lambda。或者,您也可以使用
pandas
来实现类似的功能。或者
[在groupby(lst,“\n.”中列出(g)代表k,g代表g,如果不是k]
@Kasramvd非常好的观点。更新了我的答案。也许对初学者来说不太明显,但绝对值得避免使用lambda。