如何根据条件

时间:2017-10-20 15:30:34

标签: python python-3.x numpy

我有一个包含多个元素的一列numpy数组。我想编写一个函数,它接受每个元素并评估它是否满足条件。然后根据结果,它应该使用方程来计算某些东西。计算结果应与输入数组具有相同的大小。

这是我想要做的一个简单的例子。 (实际代码会更复杂)。我知道为什么它不起作用但似乎无法找到解决方案。

import numpy as np
array1 = np.arange(1,11,1)

def test(array1):
    value1 = 20
    i = 0
    value3 = array1[i]
    while array1 > value3 and i < value1:
        i =+ 1
        value3 = array1[i]

test(array1)

我试图找到解决方案:

  • 我看了any()和all(),但这不是我需要的,因为我想分别看每个元素。
  • 我查看了numpy.where()但它只返回满足条件的元素,因此更改了数组大小,这不是我想要的。

编辑: 对于我的完整解决方案,Zulfiqaar的for循环版本和Siva Kowuru所示的where函数都是可能的。由于where函数似乎更快更方便,我将其标记为已接受的答案。

3 个答案:

答案 0 :(得分:3)

您可以在numpy.where(condition [,x,y])上添加可选参数,以保持相同的数组大小。

当为真时,产生x,否则产生y

enter image description here

要与@ Zulfiqaar的答案进行比较,解决方案将是

bool

请注意,条件只是array2 = np.random.randint(1, 11, 10) >>> array2 Out[]: array([ 6, 1, 6, 2, 10, 4, 9, 10, 3, 3]) >>> np.where((array1 < 3) & (array1 > 5), array1 ** 2, array1 / 3) Out[]: array([ 0.33333333, 4. , 1. , 1.33333333, 1.66666667, 2. , 2.33333333, 2.66666667, 3. , 3.33333333]) 数组,因此您可以使用https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html一次合并多个条件。例如,与另一个数组进行比较:

<option>

答案 1 :(得分:1)

应使用if条件:

将numpy导入为np

array1 = np.arange(1, 11, 1)
array2 = np.zeros(10)


for eachValue in range(len(array1)):                #iterate through array
    if (array1[eachValue] <3 ):                     #check for your condition
        array2[eachValue] = array1[eachValue] ** 2  #apply equation
    else:                                           #if condition not met
        array2[eachValue] = array1[eachValue] /  3  #do something else

答案 2 :(得分:0)

您可以使用带有lambda函数的map,而不是遍历所有元素:

value3 = array1[0]
map_array = np.array(list(map(lambda x: x**2 if x < value3 else x/3, array1)))

如果您不使用python 3,则无需将其从map函数转换为list。