繁体   English   中英

如何在不使用循环的情况下将 numpy 矩阵中的每一行除以同一行的最后一个元素?

[英]How can I divide each row in a numpy matrix by the last element of that same row, without using loops?

例如:

a = np.array([[ 0, 1, 1], [2, 4, 2]])

我希望数组“a”中的每一行除以每一行中的最后一个元素,因此 output 如下所示。

array([[0, 1, 1],
       [1, 2, 1]])

我想将其应用于更大的数组但具有相同的操作。 我目前正在使用 for 循环执行此操作,该循环花费的时间太长并且找不到等效的 function。

期望的结果可以通过简单的列表理解来实现。

answer = np.array([a[i]/a[i][-1] for i in range(0, len(a))])

它所做的是遍历数组a的行,并将每一行除以其最后一个元素后获得的数组添加到最终数组中。

除以列数组:

In [69]: a[:,-1]
Out[69]: array([1, 2])
In [70]: a[:,-1][:,None]
Out[70]: 
array([[1],
       [2]])
In [71]: a/a[:,-1][:,None]
Out[71]: 
array([[0., 1., 1.],
       [1., 2., 1.]])

通过广播规则,a (3,2) 与 a (1,2) 一起工作

获得正确柱形的替代方法

In [72]: a[:,[-1]]
Out[72]: 
array([[1],
       [2]])
In [73]: a[:,-1:]
Out[73]: 
array([[1],
       [2]])

你可以这样进行:

for row in a:  # iterate over each row
    row //= row[-1]  # divide each row by last element

这给了你想要的结果,可以应用于更大的 numpy arrays。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM