首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一次使用分隔符的Numpy拆分数据

一次使用分隔符的Numpy拆分数据
EN

Stack Overflow用户
提问于 2017-05-19 11:58:18
回答 2查看 995关注 0票数 1

我有一个数字数组,看起来是这样的:

代码语言:javascript
运行
复制
[
[1,2,6,1,5]
[3,6,46]
[7,7,6,6,6,62,4]
[2,4,52,85,78]
]

数据是异构的。

我现在的问题是,如果可能的话,不对每一行(意思是"for循环“)用分隔符分割数据。

结果应该看起来像(3d数组)

代码语言:javascript
运行
复制
[
[[1][2][6][1][5]]
[[3][6][46]]
[[7][7][6][6][6][62][4]]
[[2][4][52][85][78]]
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-19 12:51:32

方法#1 :这里有一种方法使用输入数组的扁平列表版本,然后简单地拆分-

代码语言:javascript
运行
复制
def extend_dims_objectarr(a):
    v = np.concatenate(a)[:,None].tolist()
    idx = np.r_[0,np.cumsum(list(map(len,a)))]
    return np.array([v[i:j] for i,j in zip(idx[:-1], idx[1:])])

样本输入,输出-

代码语言:javascript
运行
复制
In [81]: a
Out[81]: 
array([[1, 2, 6, 1, 5], [3, 6, 46], [7, 7, 6, 6, 6, 62, 4],
       [2, 4, 52, 85, 78]], dtype=object)

In [82]: extend_dims_objectarr(a)
Out[82]: 
array([[[1], [2], [6], [1], [5]], [[3], [6], [46]],
       [[7], [7], [6], [6], [6], [62], [4]], 
       [[2], [4], [52], [85], [78]]], dtype=object)

方法2 :如果您可以使用数组作为输出,下面是另一个使用列表理解的方法

代码语言:javascript
运行
复制
np.array([np.array(i)[:,None] for i in a])

要获得列表数组作为输出,只需附加.tolist()np.array(i)[:,None].tolist()即可。

运行时测试

代码语言:javascript
运行
复制
In [108]: a = np.array([np.random.randint(0,9,(i)).tolist() \
                  for i in np.random.randint(2,9,(10000))])

# @Allen's soln
In [109]: %timeit np.r_[list(map(lambda x: np.asarray(x).reshape(-1,1),a))]
100 loops, best of 3: 15.2 ms per loop

# Proposed in this post
In [110]: %timeit np.array([np.array(i)[:,None] for i in a])
100 loops, best of 3: 9.94 ms per loop
票数 1
EN

Stack Overflow用户

发布于 2017-05-19 12:13:46

设置

代码语言:javascript
运行
复制
a = np.asarray([
[1,2,6,1,5],
[3,6,46],
[7,7,6,6,6,62,4],
[2,4,52,85,78],
])

溶液

代码语言:javascript
运行
复制
#put the array to a DataFrame and then reshape it to a 3D array.
import pandas as pd
a2 = pd.DataFrame(a).applymap(lambda x: np.asarray(x).reshape(-1,1)).values

print(a2)
Out[264]: 
array([[array([[1],
       [2],
       [6],
       [1],
       [5]])],
       [array([[ 3],
       [ 6],
       [46]])],
       [ array([[ 7],
       [ 7],
       [ 6],
       [ 6],
       [ 6],
       [62],
       [ 4]])],
       [array([[ 2],
       [ 4],
       [52],
       [85],
       [78]])]], dtype=object)

更新

另一种不使用熊猫的方法,它只具有矮小和内置的功能。

代码语言:javascript
运行
复制
a2 = np.r_[list(map(lambda x: np.asarray(x).reshape(-1,1),a))]

print(a2)

Out[312]: 
array([array([[1],
       [2],
       [6],
       [1],
       [5]]),
       array([[ 3],
       [ 6],
       [46]]),
       array([[ 7],
       [ 7],
       [ 6],
       [ 6],
       [ 6],
       [62],
       [ 4]]),
       array([[ 2],
       [ 4],
       [52],
       [85],
       [78]])], dtype=object)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44069539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档