Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在迭代n维numpy数组时创建新数组_Python_Arrays_Numpy - Fatal编程技术网

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

Python 在迭代n维numpy数组时创建新数组,python,arrays,numpy,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。 e、 g flag=(arr[i,j]>me

如何迭代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。 e、 g

flag=(arr[i,j]>median-alpha)或(arr[i,j]
我会用2个for语句来解决这个问题

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)
flags=arr*0
对于范围内的i(arr.shape[0]):
对于范围内的j(arr.shape[1]):
标志[i,j]=(arr[i,j]>中值-α)或(arr[i,j]<中值+α)

有没有一种更简单、更有效的方法来解决这个问题?理想情况下,该解决方案也适用于n维数组(1,2,…n维)

您根本不需要迭代

np.logical_or(arr < median - alpha, arr > median + alpha)
np.逻辑或(arrmedian+alpha)

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)
alpha=3。
中位数=np.中位数(arr)
abs(arr中值)
当然,它适用于任何数量的维度


更一般地说,您可以在每次使用公式化条件时避免循环。Python运算符不映射到numpy数组,使用它们意味着循环和减速。

嗯,现在您正在生成
True
标志,除非
arr[i,j]==中值*alpha
。这就是你想要的吗?没错,这只是一个例子。我要问的是迭代过程。我将更新条件,使其更加合理,但您的答案是“使用”我设置的特定条件。在某些情况下,虽然这种情况可能非常复杂(甚至更糟的情况可能根本不是一种情况),但我想知道是否有更通用的解决方案来避免此类循环。
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)