我有以下2x2的字典数组:
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]]
的值,即:
0 1
2 3
除了double for循环之外,还有其他方法吗?这就是:
numbers = [[a[i,j]['x_id'] for j in range(2)] for i in range(2)]
发布于 2019-05-31 07:23:05
如果您正在讨论代码中的显式for循环,则可以使用单个flatten
循环完成数组,然后对最终数组进行整形
numbers = np.array([i['x_id'] for i in a.flatten()]).reshape(a.shape)
# array([[0, 1],
# [2, 3]])
另一种解决方案是在扁平阵列上使用itemgetter
,如
import operator
numbers = np.array(list(map(operator.itemgetter('x_id'), a.flatten()))).reshape(a.shape)
Performance:两种方法花费的时间相似
%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)
https://stackoverflow.com/questions/56386717
复制相似问题