- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我绝不是数学家,我正试图了解 GLM 在 vector 和矩阵之间的乘法发生了什么。据我了解,GLM 矩阵的大小为列 x 行,并且在 GLM 中的正常矩阵乘法中,表达式左侧的列数必须与右侧的行数相同。这就是我的问题所在。
让我感到困惑的是我可以将一个 2x3 矩阵乘以一个三维 vector
| 1, 4 |
| 2, 5 | x [ 1, 2, 3 ]
| 3, 6 |
给我一个 [ 9, 12, 15 ]
的答案。但我也可以将 3x2 矩阵乘以相同的 3D vector
| 1, 3, 5 |
| 2, 4, 6 | x [ 1, 2, 3 ]
现在我得到了 [ 22, 28 ]
的二维 vector 。为什么这是可能的?这里发生了什么?
更让我困惑的是,我可以调换顺序,把 vector 放在左边,把矩阵放在右边,我仍然得到一个有效的结果。同样,为什么这可能?怎么了?这是 GLM 特有的行为,还是标准的矩阵行为?
如果这是简单的数学,我深表歉意,但是在互联网上搜索了很多小时并自己使用 GLM 进行了测试之后,我仍然不理解这个概念。我感谢任何帮助。谢谢。
编辑:这是一个代码示例
#define GLM_ENABLE_EXPERIMENTAL
#include <iostream>
#include <glm/mat2x3.hpp>
#include <glm/mat3x2.hpp>
#include <glm/gtx/string_cast.hpp>
int main() {
glm::mat2x3 a = {
1, 2, 3,
4, 5, 6
};
glm::mat3x2 b = {
1, 2,
3, 4,
5, 6
};
glm::vec3 c = {
1, 2, 3
};
// These all compile correctly? And each gives different results.
std::cout << glm::to_string(a * c) << std::endl;
std::cout << glm::to_string(c * a) << std::endl;
std::cout << glm::to_string(b * c) << std::endl;
std::cout << glm::to_string(c * b) << std::endl;
}
控制台输出如下
vec3(9.000000, 12.000000, 15.000000)
vec2(14.000000, 32.000000)
vec2(22.000000, 28.000000)
vec3(5.000000, 11.000000, 17.000000)
最佳答案
我发现发生了什么事!这个问题最终与矩阵完全无关,而是 GLM 的一个怪癖。在代码示例中,a * c
和 c * b
能够编译,因为 c
被隐式转换为二维 vector 而无需任何警告。就这么简单,但非常困惑!
关于c++ - GLM 的 vector 矩阵乘法行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58621772/
如何将 glm::vec4 转换为 glm::vec3? 仅需要 x、y、z - 可以删除 w 组件。 在 GLSL 中,这可以通过 .xyz[1] 完成,但在 glm 中,这会导致编译错误: err
我正在使用 R 中的 h2o 包通过 h2o.glm() 函数来适应 GLM。在具有 l1 正则化惩罚的 GLM 中评估特征重要性的一种合理方法是监视参数进入线性预测器(即模型)的顺序,因为 l1 惩
我在从最新版本的 R 中的 glm 计算 OR 置信区间时遇到问题,但我以前没有遇到过这个问题。与任何 glm 在哪里 family="binomial" ,无论模型多么简单,我都可以轻松提取摘要和
我需要在我的 glm 图上添加 95% 的置信区间。 当我执行 multiline=T 时(因为我需要在同一个地 block 上进行 2 次处理,所以我这样做了),间隔消失了。我怎样才能让他们回来?
对于上下文,我一直在学习 OpenGL,并且学习了透视投影。花了整整一个小时试图弄清楚为什么我的三角金字塔没有正确显示,直到我注意到我的一个矩阵乘法(使用 operator* for glm::mat
你能告诉我 返回了什么吗? glm$残差和 残留物(glm)其中 glm 是一个准泊松对象。例如我将如何使用 glm$y 和 glm$linear.predictors 创建它们。 glm$残差
这是关于理解 glm 源码的。我想知道 glm 是否对它的类进行了零初始化并进行了尝试。是的,glm::vec3 和 glm::mat4 被初始化,即使没有提供构造函数值。然后我想了解它是如何完成的并
我正在尝试使用 probit 模型重现其他人的工作。不幸的是,我没有太多关于他们方法的信息,只有他们的起始数据和他们的模型图。 当我在 ggplot 中绘制数据并使用 geom_smooth(meth
我有一个 ModelMatrix 类,其中我有一个 glm::vec3 定义为 glm::vec3 *position = nullptr; 然后我得到了一个setter方法 void ModelMa
我想标准化生物数据集的变量。我需要使用不同的响应变量运行 glm、glm.nb 和 lm。 该数据集包含按地块划分的给定树种的数量(所有地块大小相同)和一系列定性变量:植被类型、土壤类型和牛的存在/不
我正在使用著名的 OpenGL 框架创建一个漂亮的图形引擎,但突然遇到了一个意想不到的问题(就像所有问题一样)。 我必须创建一个函数来修改 glm::mat3 中的特定值。为此,我创建了一个简单的函数
其他答案似乎有一些相关信息,但没有解决我遇到的问题。 从我在 Xcode 中的项目中,我选择了“将文件添加到项目”并选择了整个 glm 子文件夹(我被告知这是使用 glm 所需的全部)。然后,在我的
像下面这样计算四元数时, 你能解释一下 1.0f means.. 是什么意思吗? 我认为它可能是 x 轴的 90 度。 glm::angleAxis(3.141592... / 2, glm::dv
这可能真的很简单,但我已经下载了 glm 的正确软件包 glm-0.9.9-a2,但我不知道如何安装。说明要么太复杂,要么太简单。 我无法通过使用包管理器或将存储库添加到 aptitude 或 Ana
我无法理解使用 glm 的效果编码。举个例子: data('mpg') mpg$trans = as.factor(mpg$trans) levels(mpg$trans) [1] "auto(av)
我正在尝试在 R 中重现二项式 glm 的结果。 考虑来自此处的数据 http://www.ats.ucla.edu/stat/r/dae/logit.htm mydata <- read.csv("
ChatGPT已经火了一段时间了,国内也出现了一些平替,其中比较容易使用的是ChatGLM-6B: https://github.com/THUDM/ChatGLM-6B ,主要是能够让我们基于
我一直在阅读code R 使用它来拟合广义线性模型 (GLM),因为 R 的源代码是免费提供的。使用的算法称为迭代重新加权最小二乘法 (IRLS),这是一种有据可查的算法。对于每次迭代,都会调用 Fo
我读过 glmnet 可以在没有正则化的情况下使用,即它可以用作常规 glm。我正在写一篇论文并试图避免使用许多不同的包,因此使用 glmnet 进行常规的 glm 逻辑回归拟合会很方便。谁能帮我?
我正在尝试使用 glm( family='binomial') 来拟合逻辑回归. 这是模型: model<-glm(f_ocur~altitud+UTM_X+UTM_Y+j_sin+j_cos+tem
我是一名优秀的程序员,十分优秀!