加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 嵌套NumPy数组并使用分割它们的方法

发布时间:2020-12-20 11:48:13 所属栏目:Python 来源:网络整理
导读:我是NumPy的新手,我试图在我的代码中使用它来处理一些表. 我有一个坐标列表,如下所示: coordinates = [["2 0"],["0 1"],["3 4"]] 并希望像这样写: coordinatesNumpy = np.array([[2,0],[0,1],[3,4]]) 在常规Python中,这很容易,但你如何使用NumPy?我是否应
我是NumPy的新手,我试图在我的代码中使用它来处理一些表.

我有一个坐标列表,如下所示:

coordinates = [["2 0"],["0 1"],["3 4"]]

并希望像这样写:

coordinatesNumpy = np.array([[2,0],[0,1],[3,4]])

在常规Python中,这很容易,但你如何使用NumPy?我是否应该使用常规Python函数为列表创建表,然后将2d表转换为np.array,或者NumPy是否具有拆分和填充的方法?

我尝试了一些东西,但他们都给了我一个错误.我试过的最新事情:

flowers = np.array([np.array([int(coordinate[0]),int(coordinate[2])]) for coordinate in coordinates])

我怎么能用NumPy做这样的事情?

解决方法

使用纯Python列出理解

这有效:

>>> flowers = np.array([[int(x)  for x in coordinate[0].split()] 
                        for coordinate in coordinates])
>>> flowers
array([[2,4]])

我不知道任何NumPy功能可以一步完成.

性能

我们来看看事情有多快.

对于您的示例数据,纯Python版本是最快的:

%timeit np.array([np.fromstring(i,dtype=int,sep=' ') for j in coordinates for i in j])
100000 loops,best of 3: 18.4 μs per loop

%timeit np.array([np.fromstring(item[0],sep=' ').tolist() for item in coordinates])
10000 loops,best of 3: 19 μs per loop

%timeit np.array([[int(x)  for x in coordinate[0].split()] for coordinate in coordinates])
100000 loops,best of 3: 12.1 μs per loop

使数据更大:

long_coords = coordinates * 1000

但是,sep=' ') for j in long_coords for i in j]) 100 loops,best of 3: 12.2 ms per loop %timeit np.array([np.fromstring(item[0],sep=' ').tolist() for item in long_coords]) 100 loops,best of 3: 14.2 ms per loop %timeit np.array([[int(x) for x in coordinate[0].split()] for coordinate in long_coords]) 100 loops,best of 3: 7.54 ms per loop

更大数据的一致结果:

very_long_coords = coordinates * 10000

%timeit np.array([np.fromstring(i,sep=' ') for j in very_long_coords for i in j])
10 loops,best of 3: 125 ms per loop

%timeit np.array([np.fromstring(item[0],sep=' ').tolist() for item in very_long_coords])
10 loops,best of 3: 140 ms per loop

%timeit np.array([[int(x)  for x in coordinate[0].split()] for coordinate in very_long_coords])
10 loops,best of 3: 73.5 ms per loop

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读