Python 迭代多维数组和跟踪/执行迭代索引操作的最佳方法是什么

Python 迭代多维数组和跟踪/执行迭代索引操作的最佳方法是什么,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,我需要在多维numpy数组上做很多操作,因此我正在尝试最好的方法 假设我有一个这样的数组: A = np.random.uniform(0, 1, size = 100).reshape(20, 5) 我的目标是获得每个条目及其索引的最大值numpy.amax()。因此,A[0]可能是这样的: A = np.random.uniform(0, 1, size = 100).reshape(20, 5) A[0]=[0.64570441 0.31781716 0.07268926 0.8418

我需要在多维numpy数组上做很多操作,因此我正在尝试最好的方法

假设我有一个这样的数组:

A = np.random.uniform(0, 1, size = 100).reshape(20, 5)
我的目标是获得每个条目及其索引的最大值
numpy.amax()。因此,
A[0]
可能是这样的:

A = np.random.uniform(0, 1, size = 100).reshape(20, 5)
A[0]=[0.64570441 0.31781716 0.07268926 0.84183753 0.72194227]

我想获得最大值以及该最大值的索引
[0.84183753][0,3]
。不需要对结果进行具体表示,只需要一个示例。我甚至只需要水平索引

我尝试使用numpy的nditer对象:

A_it = np.nditer(A, flags=['multi_index'], op_flags=['readwrite'])

while not A_it.finished:
    print(np.amax(A_it.value))
    print(A_it.multi_index[1])
    A_it.iternext()
在迭代过程中,我可以访问数组的每个元素及其索引,但我似乎无法以语法方式将每个元素和索引中的
numpy.amax()
函数组合在一起。我甚至可以使用
nditer
object来完成它吗


此外,我在书中读到,在numpy中使用
nditer
或使用迭代通常意味着我做错了什么。但是我找不到另一种方便的方法来实现我的目标。显然,我是numpy和python的初学者,所以任何要搜索或提示的关键字都非常受欢迎。

nditer
的一个主要问题是它会迭代每个元素,而不是每一行。最好将其用作Cython或C重写代码的垫脚石

如果您只希望数组中每一行的最大值,那么简单的迭代或列表理解就可以了

for row in A: print(np.amax(row))
或者将其转换回阵列:

np.array([np.amax(row) for row in A])
但是,通过给
amax
一个轴参数,可以得到相同的值

np.amax(A,axis=1)
np.argmax
标识最大值的位置

np.argmax(A,axis=1)
使用argmax值,您还可以选择max值

ind=np.argmax(A,axis=1)
A[np.arange(A.shape[0]),ind]

(速度与重复
np.amax
调用差不多)。

A.argmax(axis=1)?不要使用
nditer
。使用常规python进行循环。