python矩阵输出对齐_在处理不同形状的数组时如何对齐矩阵
(使⽤python)
由于您使⽤的是余弦相似性,因此a和{}应该有⼀个⼏何解释。(余弦相似性是求两个向量之间夹⾓的余弦)。在
长度为2的向量可以被认为存在于xy-plane中,长度为3的向量可以被认为存在于xyz-space中。
所以平⾯上的向量[0.4, 0.9]可以看作是xyz-space中的三维向量{}。在
如果这是合理的,那么取⼆维向量和三维向量之间的内积就相当于去掉第三个分量后的内积(因为任何东西乘以0都是0)。在
因此,您可以这样定义cx:def cx(a, b) :
python 定义数组a, b = (a, b) if len(a) < len(b) else (b, a)
b = b[:len(a)]
try:
assert any(a)
assert any(b)
except AssertionError:
print('either a or b is zero')
# return 0 or
# raise
return round(np.inner(a, b)/(LA.norm(a)*LA.norm(b)), 2)
通过在l中填充缺少的值,可以使其成为NumPy数组,从⽽获得更好的性能。然后,您可以⽴即对整个数组应⽤NumPy操作,并消除双Pythonfor-loops:
^{pr2}$
收益率[[ 1. 0.66 0.66]
[ 0.66 1. 0.53]
[ 0.66 0.53 1. ]]
与def cx(a, b) :
a, b = (a, b) if len(a) < len(b) else (b, a)
b = b[:len(a)]
return round(np.inner(a, b)/(LA.norm(a)*LA.norm(b)), 2)
def using_cx():
for v in l:
for y in l:
cosine=cx(v,y)
时间显⽰速度提⾼了11倍:In [90]: %timeit using_cx()
1000 loops, best of 3: 380 us per loop
In [91]: %timeit cosine_similarity(to_3d(l))
10000 loops, best of 3: 32.6 us per loop
计算仍然是⼆次的,如果您希望⽐较l中的每⼀对可能的⾏,则始终是⼆次的。但是它更快,因为NumPy函数是⽤C编写的,这⽐在Python 循环中调⽤Python函数的等效代码要快。在
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论