规范化numpy数组

wwl*_*wwl 2 python numpy vectorization

给定一个数组,我想将其标准化,使每行总和为1.

我目前有以下代码:

import numpy
w = numpy.array([[0, 1, 0, 1, 0, 0], 
                 [1, 0, 0, 0, 0, 1], 
                 [0, 0, 0, 0, 0, 1], 
                 [1, 0, 0, 0, 1, 0], 
                 [0, 0, 0, 1, 0, 1], 
                 [0, 1, 1, 0, 1, 0]], dtype = float)


def rownormalize(array):
    i = 0
    for row in array:
        array[i,:] = array[i,:]/sum(row)
        i += 1
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

1)代码有效,但我想知道是否有更优雅的方式.

2)如果它是int,我如何将数据类型转换为float?我试过了

if array.dtype == int:
    array.dtype = float
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Jul*_*ien 7

你可以这样做1):

array /= array.sum(axis=1, keepdims=True)
Run Code Online (Sandbox Code Playgroud)

和2)那样:

array = array.astype(float)
Run Code Online (Sandbox Code Playgroud)