根据另一个数组的值从一个数组中提取值的函数

时间:2016-05-18 13:09:39

标签: python numpy

我的数据来自两个numpy数组' a'和' b':

In: a # numpy array, type int64
Out: array([4, 3, 1, ..., 3, 2, 3])

In: b # numpy array, type float 64
Out: 
array([[-0.07],
       [ 0.08],
       [-0.53],
       ..., 
       [ 0.25],
       [ 0.52],
       [ 0.11]])

两个数组的长度相同,我想创建一个函数,该函数返回来自' b'取决于数组中的值' a'。我尝试了下面的功能,但它没有正确完成工作。

def my_func(a,b):
    result = []
    for i in b:
        for z in a:
            if z==5:
                result.append(i)
    return np.asarray(result)

3 个答案:

答案 0 :(得分:1)

这应该有效。请注意我制作b数组的方式与你在那里格式化的方式不同。基本上,你只需要一个增量器,在这种情况下我使用了j。然后遍历a,并且每当a等于5时,将相应的b值附加到结果

import numpy as np

a = np.array([4,3,2,3,2,3,5])
b = np.array([-0.07, 0.08, -0.53, 0.25, 0.52, 0.11, 0.32])

def my_func(a,b):
    result = []
    j = 0
    for z in a:
        if z == 5:
            result.append(b[j])
        j += 1

    return result

答案 1 :(得分:0)

你的循环是二维的,而它只需要一个维度。试试这个:

def my_func(a,b):
    result = []
    for i in range(len(b)):
        if a[i] == 5:
            result.append(b[i])
    return np.asarray(result)

一种更好,更pythonic的方式就是这样:

def my_func(a,b):
    result = [b[i] for i in range(len(b)) if a[i] == 5]
    return np.asarray(result)

答案 2 :(得分:0)

对于Numpy数组,这非常简单:

>>> import numpy as np
>>> a = np.array([4,3,2,3,2,3,5])
>>> b = np.array([-0.07, 0.08, -0.53, 0.25, 0.52, 0.11, 0.32])
>>> b[ a==5 ]
array([ 0.32])