在迭代n维numpy数组时创建新数组

时间:2017-10-17 09:27:28

标签: python arrays numpy

如何迭代n维的numpy数组并创建一个类似形状的新数组。

e.g。输入:

import numpy as np

arr = np.array([[1,2,3],
                [4,5,6],
                [7,8,9],
                [0,0,0]])
alpha = 3.
median = np.median(arr)

我想构建一个相同(4,3)的新数组,其标志设置为1,用于随机条件。 例如

flag = (arr[i,j] > median - alpha) or (arr[i,j] < median + alpha)

我会用2语句来解决这个问题

flags = arr * 0 
for i in range(arr.shape[0]):
    for j in range(arr.shape[1]):
         flags[i,j] = (arr[i,j] > median - alpha) or (arr[i,j] < median + alpha)

有没有办法以更简单,更有效的 pythonic 方式解决这个问题?理想情况下,解决方案也适用于n维数组(1,2,... n维)

2 个答案:

答案 0 :(得分:5)

你根本不需要迭代。

np.logical_or(arr < median - alpha, arr > median + alpha)

答案 1 :(得分:1)

Numpy完成以避免循环:

alpha = 3.
median = np.median(arr)

abs(arr-median) < alpha

#array([[ True,  True,  True],
#      [ True,  True,  True],
#      [False, False, False],
#      [False, False, False]], dtype=bool)

当然它适用于任何数量的维度。

更一般地说,每次使用numpy logic functions制定条件时,都可以避免循环。 Python 以及运算符不会映射到numpy数组,并且使用它们意味着循环和减速。