python – 按行查找矩阵和矢量之间的交点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 按行查找矩阵和矢量之间的交点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1615字,纯文字阅读大概需要3分钟。
内容图文
![python – 按行查找矩阵和矢量之间的交点](/upload/InfoBanner/zyjiaocheng/741/1653006f39e04c2bbb5f8bfab57d5ec2.jpg)
考虑以下:
tmp1 = ['a', 'b', 'c', 'd', 'e']
tmp2 = ['f', 'g', 'h', 'b', 'd']
tmp3 = ['b', 'i', 'j', 'k', 'l']
matr = np.array([tmp1, tmp2, tmp3])
matr
产生一个矩阵:
array([['a', 'b', 'c', 'd', 'e'],
['f', 'g', 'h', 'b', 'd'],
['b', 'i', 'j', 'k', 'l']],
dtype='|S1')
现在,我想知道与向量相交的每一行中的值的总和.说,
vec = ['a', 'c', 'f', 'b']
[sum([y in vec for y in row]) for row in matr]
返回,
[3, 2, 1]
这是所需的输出.它的问题是我的’matr’实际上是≈1000000x 2200,我有6700个向量来比较.我在这里的解决方案太慢而无法尝试.
我怎样才能改善我正在做的事情?
值得注意的是,matr里面的值来自一组~30000的值,而且我有完整的值.我已经考虑过这样的解决方案,我对每个向量做出这些30000值的字典,并且在按行求和之前使用dict在整个矩阵中转换为True / False.我不确定这是否会有所帮助.
解决方法:
对于matr和vec作为数组,这里有一个np.searchsorted –
def count_in_rowwise(matr,vec):
sidx = vec.argsort()
idx = np.searchsorted(vec,matr,sorter=sidx)
idx[idx==len(vec)] = 0
return (vec[sidx[idx]] == matr).sum(1)
使用相对较小的vec,我们可以预先对它进行排序和使用,为我们提供另一种计算行数的方法,就像这样 –
def count_in_rowwise_v2(matr,vec,assume_sorted=False):
if assume_sorted==1:
sorted_vec = vec
else:
sorted_vec = np.sort(vec)
idx = np.searchsorted(sorted_vec,matr)
idx[idx==len(sorted_vec)] = 0
return (sorted_vec[idx] == matr).sum(1)
上述解决方案适用于通用输入(数字或字符串).为了解决我们特定的字符串情况,我们可以通过使用np.unique将字符串转换为数字然后重新使用count_in_rowwise / count_in_rowwise_v2来进一步优化它,这将为我们提供第二种方法,就像这样 –
u,ids = np.unique(matr, return_inverse=True)
out = count_in_rowwise(ids.reshape(matr.shape),ids[np.searchsorted(u,vec)])
内容总结
以上是互联网集市为您收集整理的python – 按行查找矩阵和矢量之间的交点全部内容,希望文章能够帮你解决python – 按行查找矩阵和矢量之间的交点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。