根据另一个数组的索引列表从一个数组中获取元素

时间:2017-11-09 04:28:53

标签: python numpy

我有一个像这样的2 numpy数组

a = [array([ 0.1,  0.1,  0.1]), array([ 0.2,  0.2,  0.2])]

b = [0 0 0 1]

我想要的是这样的东西 -

c = [[0.1,  0.1,  0.1],[0.1,  0.1,  0.1],[0.1,  0.1,  0.1],[0.2, 0.2, 0.2]]

即。基于b的索引的元素。

有没有办法可以使用numpy和vectorization实现这一点,即不循环使用值?

4 个答案:

答案 0 :(得分:1)

如果将type存储为二维numpy数组:

const v1: { type: "S"; payload: string } = { type: "S", payload: "test" };
const v2: { type: "N"; payload: number } = { type: "N", payload: 123 };

interface ActionMap {
    S: typeof v1;
    N: typeof v2;
}

type Actions = ActionMap[keyof ActionMap];


const findByTypeWorks = <T extends keyof ActionMap>(type: T) => (
    action: Actions
): action is ActionMap[T] => action.type === type;

const filterWithJustType = [v1, v2].filter(findByTypeWorks("S"));
console.log(filterWithJustType[0].payload.trim());

甚至通过a>>> a = np.array([[0.1, 0.1, 0.1], [0.2, 0.2, 0.2]]) # result: array([[ 0.1, 0.1, 0.1], # [ 0.2, 0.2, 0.2]]) 转换为numpy数组, 然后你可以使用列表b来根据需要访问元素:

a

如果您需要a = np.array(a)作为输出,请使用>>> b = [0,0,0,1] >>> print(a[b]) array([[ 0.1, 0.1, 0.1], [ 0.1, 0.1, 0.1], [ 0.1, 0.1, 0.1], [ 0.2, 0.2, 0.2]]) 数组的list方法:

tolist()

答案 1 :(得分:0)

列表理解

[a[x].tolist() for x in b]

答案 2 :(得分:0)

this.navCtrl.push("DashboardPage")

备选方案1

this.navCtrl.push(DashboardPage)

输出:

import numpy

a = [numpy.array([ 0.1,  0.1,  0.1]), numpy.array([ 0.2,  0.2,  0.2])]
b = [0, 0, 0, 1]

备选方案2

print([a[x].tolist() for x in b])

输出:

[[0.1, 0.1, 0.1], [0.1, 0.1, 0.1], [0.1, 0.1, 0.1], [0.2, 0.2, 0.2]]

备选方案3

print(numpy.array(a)[b])

输出:

[[ 0.1  0.1  0.1]
 [ 0.1  0.1  0.1]
 [ 0.1  0.1  0.1]
 [ 0.2  0.2  0.2]]

备选方案4

print(list(map(lambda i: a[i], b)))

输出:

[array([ 0.1,  0.1,  0.1]), array([ 0.1,  0.1,  0.1]), array([ 0.1,  0.1,  0.1]), array([ 0.2,  0.2,  0.2])]

答案 3 :(得分:0)

  

使用numpy

如果你想使用numpy:

print([a[i].tolist() for i in b])
  

不使用numpy:

import numpy as np
a = np.array([[0.1, 0.1, 0.1], [0.2, 0.2, 0.2]])
b = [0,0,0,1]

print([value_1.tolist() for value in b for index,value_1 in enumerate(a) if index==value])

以上列表理解与:

相同
final=[]
for value in b:
    for index,value_1 in enumerate(a):
        if index==value:
            final.append(value_1.tolist())

print(final)

输出:

[[0.1, 0.1, 0.1], [0.1, 0.1, 0.1], [0.1, 0.1, 0.1], [0.2, 0.2, 0.2]]