我有一个包含多个元素的一列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)
我试图找到解决方案:
编辑: 对于我的完整解决方案,Zulfiqaar的for循环版本和Siva Kowuru所示的where函数都是可能的。由于where函数似乎更快更方便,我将其标记为已接受的答案。
答案 0 :(得分:3)
您可以在numpy.where(condition [,x,y])上添加可选参数,以保持相同的数组大小。
当为真时,产生x,否则产生y
要与@ 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。