首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从字典数组中提取数字数组

从字典数组中提取数字数组
EN

Stack Overflow用户
提问于 2019-05-31 07:06:39
回答 1查看 44关注 0票数 1

我有以下2x2的字典数组:

代码语言:javascript
复制
a = np.array([[{'x_id':0, 'y_id':0},{'x_id':1, 'y_id':1}],[{'x_id':2, 'y_id':0},{'x_id':3, 'y_id':1}]])

我想要获得一个2x2的数字数组,该数组对应于键'x_id'[[0, 1], [2, 3]]的值,即:

代码语言:javascript
复制
0  1
2  3

除了double for循环之外,还有其他方法吗?这就是:

代码语言:javascript
复制
numbers = [[a[i,j]['x_id'] for j in range(2)] for i in range(2)]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 07:23:05

如果您正在讨论代码中的显式for循环,则可以使用单个flatten循环完成数组,然后对最终数组进行整形

代码语言:javascript
复制
numbers = np.array([i['x_id'] for i in a.flatten()]).reshape(a.shape)
# array([[0, 1],
#        [2, 3]])

另一种解决方案是在扁平阵列上使用itemgetter,如

代码语言:javascript
复制
import operator
numbers = np.array(list(map(operator.itemgetter('x_id'), a.flatten()))).reshape(a.shape)

Performance:两种方法花费的时间相似

代码语言:javascript
复制
%timeit np.array([i['x_id'] for i in a.flatten()]).reshape(a.shape)
# 4.16 µs ± 676 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit np.array(list(map(operator.itemgetter('x_id'), a.flatten()))).reshape(a.shape)
# 4.9 µs ± 1.26 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56386717

复制
相关文章

相似问题

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