Python 获取numpy中的列索引
我是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
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函数的轴参数的信息索引是什么意思?