问题标签 [vector-space]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
869 浏览

c++ - atan2 是否需要归一化向量?向量之间的角度使用 acos 或 atan 哪个更好?

在计算两个向量之间的角度时,我传统上使用 acos,但这需要对两个向量进行归一化。atan2 可用于完成相同的任务(特别是atan2(b.y_, b.x_) - atan2(a.y_, a.x_)),这是否需要归一化向量?

如果 atan2 不需要归一化向量,这会更好用吗,因为归一化可能成本高昂且“更”容易出错,因为它需要 sqrt 操作?

然后我读到atan2本身可能比acos更昂贵,但更准确?然后我还阅读了其他建议相反的互联网 :( 很多相互矛盾的信息,不确定使用 acos 或 atan 计算两个向量之间的角度有什么关系。

推荐哪个?每种用途的好处/问题是什么?

任何帮助将不胜感激,谢谢!

0 投票
0 回答
119 浏览

c++ - 在 C++ 中实现一个数学向量,重用标准库的容器

这个问题是由以下实现一阶常微分方程 (ODE)积分的龙格库塔公式引起的。

这可用于集成如下功能

但是上面的 Runge Kutta 代码也可用于求解具有多个因变量的高阶 ODE 或 ODE。为此,模板参数 Vector 必须是具有适当定义的算术运算符的数字(或不同类型的向量)的容器。

因此,我正在寻找Vector具有以下属性的类型的实现:

  1. 类型是数字或不同类型向量的容器。
  2. 适当地重载运算符operator+,operator-和.operator*operator/
  3. 在调用代码中不需要使用这些运算符的 using 声明。
  4. 标准库被重用。

我想出的最好的方法是std::array在新的命名空间中创建运算符

并在调用代码中有合适的 using 声明(违反上述第 2 点)

另一种可能性是公开地std::array. 这是可行的,但据我所知,这是 C++ 语言标准明确禁止的。

是否可以重用std::array- 保留上面的前四个属性 - 而无需std::array完全重写?

0 投票
0 回答
460 浏览

search-engine - 将 TF-IDF 值存储在倒排索引中

我正在创建一个搜索引擎来搜索大约 20k 个英语短语的列表,每个短语只有几个单词。

我已经研究了创建搜索引擎的方法,目前我正在使用来自 sklearn 的 TfidfVectorizer 和 Cosine Similarity 来计算排名分数。

根据我对信息检索的了解,您有检索和排名阶段,但是我很困惑如何在使用 TfidfVectorizer 之前使用倒排索引之类的数据结构来加快搜索速度?似乎 TfidfVectorizer 创建了一个与索引不同的术语文档矩阵。您可以将 TF 和 IDF 值存储在倒排索引中并在运行时使用余弦相似度吗?理想情况下,我想要短语的自动完成,所以我还需要存储边缘 ngram,而布尔模型在这里没有用。

0 投票
1 回答
46 浏览

spacy - spacy nightly (3.0.0rc) load without vocab 如何添加 word2vec 向量空间?

在 spacy 2 中,我使用它向具有向量空间 (spacy init) 的空 spacy 模型添加词汇:

在 spacy nightly 版本 3.0.0rc 中,vocab 参数不再位于 spacy.load 中。有没有人建议我如何将词汇添加到 spacy 模型中?

0 投票
0 回答
71 浏览

python - 如何在python中找到数据矩阵的非正交基?

我有一个大小为 mXn 的数据矩阵。我想知道如何在 python 中找到矩阵的一组非正交向量,其中每个向量的大小为 mX1 和基向量的数量,比如 k << n。

0 投票
1 回答
369 浏览

python - 如何使用 gensim KeyedVectors 减去和添加向量?

对于我使用gensim.models.KeyedVectors(来自模型)的项目,我需要添加和减去词向量word2vec-google-news-300

不幸的是,我已经尝试过,但无法正确地做到这一点。

让我们看一下流行的例子Queen ~= king - man + woman
当我想从国王中减去男人并添加女人时, 我可以用 gensim 做到这一点

正如预期的那样,它返回('queen', 0.7118192911148071)了我使用的模型。

现在,为了实现相同的加法和减法向量(它们都是单位范数),我尝试了以下代码:

result在上面的代码中,('king', 0.7992597222328186)这不是我所期望的。

我的错误是什么?

0 投票
1 回答
247 浏览

matrix - 线性变换矩阵

找到线性变换 T 的矩阵:R2 → R3,由 T (x, y) = (13x - 9y, -x - 2y, -11x - 6y) 相对于基础 B = {(2, 3) 定义, (-3, -4)} 和 C = {(-1, 2, 2), (-4, 1, 3), (1, -1, -1)} 分别用于 R2 和 R3。

在这里,过程应该是找到 B 的向量的变换并将其表示为 C 的线性组合,这些向量将形成线性变换的矩阵。我的方法是正确的还是我需要改变一些东西?

0 投票
1 回答
225 浏览

python - 具有不同坐标原点的坐标向量的基础编程更改(python/通用数学)

我有一个支持向量机,它使用决策超平面将我的数据分成两部分(出于可视化目的,这是一个具有三个维度的示例数据集),如下所示: 支持向量机超平面 现在我想执行基础更改,以便超平面平放在x/y 平面,这样从每个样本点到决策超平面的距离就是它们的 z 坐标。

为此,我知道我需要更改基础。SVM 的超平面由它们的系数(3d 向量)和截距(标量)给出,使用(据我所知)数学平面的一般形式:ax+by+cz=d,a,b,c 是系数的坐标d 是截距。当绘制为 3d 向量时,系数是与平面正交的向量(在图像中它是青色线)。

现在改变基:如果没有截距,我可以假设作为系数的向量是我的新基的一个向量,另一个可以是平面上的随机向量,第三个是简单的交叉两者的乘积,产生三个正交向量,它们可以是变换矩阵的列向量。下面代码中使用的 z 函数来自平面的一般形式的简单术语重新排列ax+by+cz=d <=> z=(d-ax-by)/c

然后将这个变换矩阵应用于所有点,如下所示:

现在,如果截距为零,那将完美运行,并且平面将在 xy 轴上平坦。但是,一旦我有一个截距!= 零,飞机就不再平坦了:

plane_not_flat

我理解是这种情况,因为这不是简单的基础更改,因为我的另一个基础的坐标原点不在 (0,0,0) 而是在不同的位置(超平面可能穿过系数向量在任何时候),但是我尝试将截距添加到转换中都没有导致正确的结果:

例如是错误的。我在 StackOverflow 上而不是在数学 StackExchange 上问这个问题,因为我认为我无法将相应的数学转换为代码,我很高兴我能走到这一步。

我创建了一个 github gist,其中包含进行转换的代码并在https://gist.github.com/cstenkamp/0fce4d662beb9e07f0878744c7214995上创建图,可以在链接https://mybinder.org/v2下使用 Binder 启动/gist/jtpio/0fce4d662beb9e07f0878744c7214995/master?urlpath=lab%2Ftree%2Fchange_of_basis_with_translate.ipynb如果有人想玩代码本身。

任何帮助表示赞赏!

0 投票
1 回答
53 浏览

python - 如何使用 matplotlib 在 3 维空间中绘制一条线

我有两个 3D 点,例如 a = (100, 100, 10) 和 b = (0, 100, 60),并且想通过这些点拟合一条线。我知道,3D 线方程可以有不同

的形状: 矢量形式:

参数形式:

但是我在为数值函数获取正确形状的数据时遇到问题。