使用索引列表从 2d 数组获取 1d numpy 数组
Get 1d numpy array from 2d array using list of indices
我有一个二维数组 (n x m),我想使用长度为 n 的行索引列表从中生成一个一维数组(长度为 n)。
例如:
2d = ([a,b,c],[d,e,f],[g,h,i]) # input array
1d = ([0,2,1]) # row numbers
result = ([a,e,h]) # array of the first row of first column, third row of second column, second row of third column
我找到了一种使用列表推导来完成此操作的方法(同时遍历列和索引并挑选出值),但肯定有一个 numpy 函数可以做到这一点?
试试这个:
print([y[x] for x, y in zip(_1d, _2d)])
这个怎么样?
import numpy as np
a = np.arange(9).reshape((3,3))
# [0, 1, 2]
# [3, 4, 5]
# [6, 7, 8]
print(a[[0,2,1], np.arange(3)]) # result : [0 7 5]
也可以按行迭代并根据列索引选择一个值:
print(a[np.arange(3),[0,2,1]]) # result : [0 5 7]
通过索引指定多个元素并将它们放入新数组中称为“高级索引”。
x = np.array([x for x in 'abcdefghi']).reshape((3,3))
# array([['a', 'b', 'c'],
# ['d', 'e', 'f'],
# ['g', 'h', 'i']], dtype='<U1')
d1_indices = np.array([0,1,2])
d2_indices = np.array([0,2,1])
selectx = x[d1_indices, d2_indices]
# array(['a', 'f', 'h'], dtype='<U1')
# selectx[i] = x[d1_indices[i], d2_indices[i]]
我有一个二维数组 (n x m),我想使用长度为 n 的行索引列表从中生成一个一维数组(长度为 n)。
例如:
2d = ([a,b,c],[d,e,f],[g,h,i]) # input array
1d = ([0,2,1]) # row numbers
result = ([a,e,h]) # array of the first row of first column, third row of second column, second row of third column
我找到了一种使用列表推导来完成此操作的方法(同时遍历列和索引并挑选出值),但肯定有一个 numpy 函数可以做到这一点?
试试这个:
print([y[x] for x, y in zip(_1d, _2d)])
这个怎么样?
import numpy as np
a = np.arange(9).reshape((3,3))
# [0, 1, 2]
# [3, 4, 5]
# [6, 7, 8]
print(a[[0,2,1], np.arange(3)]) # result : [0 7 5]
也可以按行迭代并根据列索引选择一个值:
print(a[np.arange(3),[0,2,1]]) # result : [0 5 7]
通过索引指定多个元素并将它们放入新数组中称为“高级索引”。
x = np.array([x for x in 'abcdefghi']).reshape((3,3))
# array([['a', 'b', 'c'],
# ['d', 'e', 'f'],
# ['g', 'h', 'i']], dtype='<U1')
d1_indices = np.array([0,1,2])
d2_indices = np.array([0,2,1])
selectx = x[d1_indices, d2_indices]
# array(['a', 'f', 'h'], dtype='<U1')
# selectx[i] = x[d1_indices[i], d2_indices[i]]