如何迭代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维)
答案 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数组,并且使用它们意味着循环和减速。