我是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内置命令,我感到非常高兴。
答案 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])