如何在numpy数组中覆盖行向量?

时间:2018-04-22 07:28:26

标签: python numpy

我正在尝试规范化numpy数组x的每一行向量,但我遇到了2个问题。

  1. 我无法更新x的行向量(图像中的源代码)
  2. 是否可以避免使用任何numpy函数的for循环(第6行)?

    import numpy as np
    x = np.array([[0, 3, 4] , [1, 6, 4]])
    c = x ** 2
    for i in range(0, len(x)):
        print(x[i]/np.sqrt(c[i].sum())) #prints [0. 0.6 0.8]
        x[i] = x[i]/np.sqrt(c[i].sum())
        print(x[i]) #prints [0 0 0]
        print(x) #prints [[0 0 0] [0 0 0]] and wasn't updated
    
  3. 我刚刚开始使用numpy,所以非常感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

  
      
  1. 我无法更新x的行向量(图片中的源代码)
  2.   

您的services.kubernetes.roles = ["master" "node"]; 没有np.array参数,因此它使用dtype。如果您希望在数组中存储浮点数,请添加<type 'numpy.int32'>

float dtype

要看到这一点,请比较

x = np.array([
        [0,3,4],
        [1,6,4]
        ], dtype = np.float)

    x = np.array([
            [0,3,4],
            [1,6,4]
            ], dtype = np.float)
    print type(x[0][0])   # output = <type 'numpy.float64'>
  

是否可以避免使用任何numpy函数的for循环(第6行)?

我就是这样做的:

    x = np.array([
            [0,3,4],
            [1,6,4]
            ])
    print type(x[0][0])   # output = <type 'numpy.int32'>

答案 1 :(得分:2)

您可以使用:

x/np.sqrt((x*x).sum(axis=1))[:, None]

示例:

In [9]: x = np.array([[0, 3, 4] , [1, 6, 4]])

In [10]: x/np.sqrt((x*x).sum(axis=1))[:, None]
Out[10]: 
array([[0.        , 0.6       , 0.8       ],
       [0.13736056, 0.82416338, 0.54944226]])

答案 2 :(得分:1)

对于第一个问题: x = np.array([[0,3,4],[1,6,4]],dtype=np.float32)

关于第二个问题: x/np.sqrt(np.sum(x**2,axis=1).reshape((len(x),1)))

答案 3 :(得分:0)

给定二维数组

x = np.array([[0, 3, 4] , [1, 6, 4]])

该阵列的行式L2范数可以用以下公式计算:

norm = np.linalg.norm(x, axis = 1)
print(norm)
[5.         7.28010989]

你不能将形状(2,3)的数组x除以形状(2,)的范数,下面的技巧可以通过在规范中添加额外的维度来实现

# Divide by adding extra dimension
x = x / norm[:, None]
print(x)

[[0.         0.6        0.8       ]
[0.13736056 0.82416338 0.54944226]]

这解决了你的两个问题