Python 获取numpy中的列索引

Python 获取numpy中的列索引,python,numpy,Python,Numpy,我是NumPy的新手,我正在寻找一种方法来获取我在矩阵中迭代的当前列的索引 import numpy as np #sum of elements in each column def p_b(mtrx): b = [] for c in mtrx.T: summ = 0 for i in c: summ += i b.append(summ) return b #return modified

我是NumPy的新手,我正在寻找一种方法来获取我在矩阵中迭代的当前列的索引

import numpy as np

#sum of elements in each column
def p_b(mtrx):
    b = []
    for c in mtrx.T:
        summ = 0
        for i in c:
            summ += i
        b.append(summ)
    return b

#return modified matrix where each element is equal to itself divided by
#the sum of the current column in the original matrix
def a_div_b(mtrx):
    for c in mtrx:
        for i in c:
            #change i to be i/p_b(mtrx)[index_of_a_current_column]
    return mtrx
对于输入
([[1,2,3],[4,5,6],[7,8,9]])
结果将是
([[1/12,2/12,3/12],[4/15,5/15,6/15],[7/18,8/18,9/18]])


关于如何实现这一点,您有什么想法吗?

您不需要这些函数和循环来实现这一点。这些都是没有效率的。使用
numpy
时,尽可能进行矢量化操作(在大多数情况下是可能的)。在可能的情况下,规则用于在不同维度的数组之间执行数学运算,这样就可以使用向量化,这比python循环更有效

在您的情况下,假设您的数组
arr
为:

arr = np.arange(1, 10)
arr.shape = (3, 3)

#arr is:
>>> arr
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
您可以通过以下方式实现所需的结果:

res = (arr.T / arr.sum(axis=0)).T

>>> res
array([[0.08333333, 0.16666667, 0.25      ],
       [0.26666667, 0.33333333, 0.4       ],
       [0.38888889, 0.44444444, 0.5       ]])
如果给定了
参数,则允许沿给定轴对数组求和。0是内轴,即要求和的轴。

.T
给出了转置矩阵。您需要转置以在正确的轴上执行除法,然后再转置回来。

阅读numpy.sum函数的文档,并阅读有关numpy sum函数的轴参数的信息索引是什么意思?