python将2d数组转换为1d数组

时间:2018-08-30 15:41:17

标签: python arrays numpy

我是python的新手,需要做以下事情:

我给出了一维向量数组(差不多是2d)。

我的任务是创建一个包含每个向量长度的一维数组。

array([[0.  , 0.  ],
   [1.  , 0.  ],
   [1.  , 1.  ],
   [1.  , 0.75],
   [0.75, 1.  ],
   [0.5 , 1.  ]
   ...

应转换为

array([0,
   1,
   1.4142,
   ...

从理论上讲我可以轻松做到这一点,但是我对python的内置命令并不熟悉,如果有人可以告诉我一些可以执行此操作的python内置命令,我感到非常高兴。

6 个答案:

答案 0 :(得分:4)

使用np.linalg.norm中的规范:

import numpy as np

a = np.array([[0., 0.],
              [1., 0.],
              [1., 1.],
              [1., 0.75],
              [0.75, 1.],
              [0.5, 1.]])

print(np.linalg.norm(a, axis=1))

输出

[0.         1.         1.41421356 1.25       1.25       1.11803399]

答案 1 :(得分:3)

借助NumPy,您可以使用矢量化操作:

const arr = ["Module1.resource1.create","Module1.resource1.read","Module1.resource1.update","Module1.resource1.delete","Module1.resourceN.create","Module1.resourceN.read","Module1.resourceN.update","Module2.resourceN.update",];
let result = {privalages:{}};
result.privalages = arr.reduce((o, curr)=>{
  let props = curr.split(".");
  props.reduce((a, prop, index)=> a[prop] = index !== props.length-1 ?(a[prop] || {}) : true,o);
  return o;
},{});

console.log(result);

或者,如果您更喜欢功能较少的解决方案:

A = np.array([[0.  , 0.  ],
              [1.  , 0.  ],
              [1.  , 1.  ],
              [1.  , 0.75],
              [0.75, 1.  ],
              [0.5 , 1.  ]])

res = np.sqrt(np.square(A).sum(1))

array([ 0.        ,  1.        ,  1.41421356,  1.25      ,  1.25      ,
        1.11803399])

答案 2 :(得分:1)

您可以使用列表推导。在Python 2中,

print [(x[0]*x[0]+x[1]*x[1])**0.5 for x in arr]

其中arr是您的输入

答案 3 :(得分:1)

您可以尝试以下方法:

import math
b = []
for el in arr:
    b.append(math.sqrt(el[0]**2 + el[1]**2))

print b

或者您可以做的更短:

b = [math.sqrt(el[0]**2 + el[1]**2) for el in arr]

其中arr是您的数组。

这里是lambda的另一个示例:

b = map(lambda el: (el[0]**2 + el[1]**2)**0.5, arr)

答案 4 :(得分:1)

您可以遍历数组以找到向量长度:

array=[[0,0],[0,1],[1,0],[1,1]]
empty=[]
for (x,y) in array:
    empty.append((x**2+y**2)**0.5)
print(empty)

答案 5 :(得分:1)

您可以使用斜边np.hypot

np.hypot(array[:, 0], array[:, 1])