Python 如何在numpy数组上迭代和修改?

Python 如何在numpy数组上迭代和修改?,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,我有一个数组,我想通过插入或删除来迭代和修改数组本身 for idx, ele in enumerate(np.nditer(array)): if idx + 1 < array.shape[0] and ele > array[idx+1]: array = np.delete(array, idx+1) print(ele) 对于idx,枚举中的元素(np.nditer(数组)): 如果idx+1array[idx+1]: array=np.delete(数组

我有一个数组,我想通过插入或删除来迭代和修改数组本身

for idx, ele in enumerate(np.nditer(array)):
  if idx + 1 < array.shape[0] and ele > array[idx+1]:
    array = np.delete(array, idx+1)
  print(ele)
对于idx,枚举中的元素(np.nditer(数组)):
如果idx+1array[idx+1]:
array=np.delete(数组,idx+1)
打印(ele)
给定[5,4,3,2,1],我希望循环打印出531,因为4和2比它们以前的元素小。但是因为python基于
数组的第一个实例创建了迭代器,所以它会打印542 1。我想知道我是否能


一般来说,如果我修改循环体中的数组,我希望修改迭代器。

可以使用where方法查找,而不是在数组上循环 满足一定条件的元素指标

然后要删除所选元素,可以使用 delete方法,传递源数组和索引列表。 然后保存结果,例如,保存在同一变量下

要添加元素,可以使用append或insert方法 (有关详细信息,请参阅Numpy文档)

我还发现了一篇关于如何在数组上循环和删除的SO帖子。
请参见

不能更改numpy数组的长度,因为numpy在创建数组时会为其分配所需的内存

您正在
=
的右侧创建一个新数组,并重新指定名称
数组

enumerate(np.nditer(array))
的返回值已在该点创建,无法识别名称
array

原则上,您可以迭代序列,同时改变其长度(通常不是一个好主意)。对象只需要有一些方法,可以让你改变它的长度(比如列表)

考虑:

>>> l = [5, 4, 3, 2, 1]                                                         
>>> for idx, ele in enumerate(l): 
...:     if ele == 3: 
...:         l.pop(idx) # mutates l 
...:     print(ele) 
...:                                                                            
5
4
3
1
>>> l                                                                           
[5, 4, 2, 1]
注意

  • l
    发生变异
  • 循环不会打印
    2
    ,因为弹出一个元素会将所有剩余元素的索引减少一个。现在
    l[2]==2
    ,但迭代器已经访问了索引
    2
    ,因此下一个打印调用将打印
    l[3]
    ,即1

  • 这证明了
    l
    的突变对后续迭代有影响。

    通常是函数、类等对象。。从标准库或其他第三方库中使用时,应按照文档中的说明进行操作。因此,您不必在代码中检查它们的行为。但您可能有其他意思,因此,如果有,请在您的问题中添加更多详细信息。您的循环似乎做了您想要做的事情-至少对于该输入。不清楚您在问什么。“python通过第一次计算数组来创建iterable对象。”“循环重新计算对象”-对不起,这对我来说是单词沙拉。我们需要一个带有初始数组、预期输出和实际输出的示例。@actual\u panda。谢谢你的“单词沙拉”。请仔细阅读我的帖子。我不是指那个具体的例子。
    >>> l = [5, 4, 3, 2, 1]                                                         
    >>> for idx, ele in enumerate(l): 
    ...:     if ele == 3: 
    ...:         l.pop(idx) # mutates l 
    ...:     print(ele) 
    ...:                                                                            
    5
    4
    3
    1
    >>> l                                                                           
    [5, 4, 2, 1]