假设我有一个AxBxC矩阵X 和一个BxD矩阵Y.
是否有一种非循环方法,通过它我可以将每个C AxB矩阵与Y?
在C中,如果我想创建一个矩阵结构,我会使用:
struct matrix {
int col, row;
double data[1]; // I want the matrix entries stored
// right after this struct
}
Run Code Online (Sandbox Code Playgroud)
然后我可以分配它
matrix* allocate_matrix(int row, int col) {
matrix* m = malloc(sizeof(matrix) + sizeof(double) * (row * col - 1));
m->row = row; m->col = col;
return m;
}
Run Code Online (Sandbox Code Playgroud)
现在我在C++中做等效吗?
编辑:
我想知道在C++中实现矩阵类的方法.
例如,我有一个像这样的矩阵:
|1 2 3|
|4 5 6|
|7 8 9|
Run Code Online (Sandbox Code Playgroud)
我需要它转换成这样的矩阵:
|1 4 7|
|2 5 8|
|3 6 9|
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳和最佳方式是什么?
我需要更改/反转数据框中的行,而不是转置数据,而是将底行移到顶部,依此类推.如果数据框是:
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
我需要转换为
7 8 9
4 5 6
1 2 3
Run Code Online (Sandbox Code Playgroud)
我读过sort()但我不认为这是我需要的,或者我无法找到方法.
我认为我的问题应该很简单,但我无法在互联网上找到任何帮助.我是Python的新手,所以我可能会遗漏一些非常明显的东西.
我有一个数组,S,就像这样[x x x] (one-dimensional).我现在创建一个对角矩阵,sigma与np.diag(S)-到目前为止,那么好.现在,我想调整这个新的对角线数组的大小,以便我可以将它乘以我拥有的另一个数组.
import numpy as np
...
shape = np.shape((6, 6)) #This will be some pre-determined size
sigma = np.diag(S) #diagonalise the matrix - this works
my_sigma = sigma.resize(shape) #Resize the matrix and fill with zeros - returns "None" - why?
Run Code Online (Sandbox Code Playgroud)
但是,当我打印出内容时my_sigma,我明白了"None".有人可以指出我正确的方向,因为我无法想象这应该是如此复杂.
在此先感谢您的帮助!
卡斯帕
图形:
我有这个:
[x x x]
Run Code Online (Sandbox Code Playgroud)
我要这个:
[x 0 0]
[0 x 0]
[0 0 x]
[0 0 0]
[0 0 0]
[0 0 …Run Code Online (Sandbox Code Playgroud) 我注意到新的OpenCV版本中添加了一个新的数据结构cv :: Matx,用于编译时已知大小的小矩阵,例如
cv::Matx31f // matrix 3x1 of float type
Run Code Online (Sandbox Code Playgroud)
检查文档我看到大多数矩阵操作都可用,但我仍然没有看到使用这种新类型而不是旧的cv :: Mat的优点.
什么时候应该使用Matx代替Mat?
有两个int矩阵A和B,超过1000行和10K列,我经常需要将它们转换为float矩阵以获得加速(4x或更多).
我想知道为什么会这样?我意识到有许多优化和矢量化,如AVX等,继续浮点矩阵乘法.但是,对于整数(如果我没有记错的话),有指令如AVX2.并且,不能使用SSE和AVX作为整数?
为什么在矩阵代数库(如Numpy或Eigen)下面没有启发式来捕获它并像浮点一样更快地执行整数矩阵乘法?
关于已接受的答案:虽然@ sascha的答案非常有用且相关,@ chatz的答案是int乘以int的实际原因,无论是否存在BLAS整数矩阵运算.
我正在使用OpenGL开发一个小型图形引擎,我的翻译矩阵存在一些问题.我正在使用OpenGL 3.3,GLSL和C++.情况是这样的:我已经定义了一个我想在屏幕上呈现的小立方体.立方体使用它自己的坐标系,所以我创建了一个模型矩阵来转换立方体.为了让自己更容易一点,我开始只使用一个平移矩阵作为立方体的模型矩阵,经过一些编码后,我设法使一切正常,立方体出现在屏幕上.没有什么特别的,但我的翻译矩阵有一点我发现有点奇怪.
据我所知,翻译矩阵的定义如下:
1, 0, 0, x
0, 1, 0, y
0, 0, 1, z
0, 0, 0, 1
Run Code Online (Sandbox Code Playgroud)
但是,这对我不起作用.当我以这种方式定义翻译矩阵时,屏幕上不会显示任何内容.它只在我定义我的翻译矩阵时才有效:
1, 0, 0, 0
0, 1, 0, 0
0, 0, 1, 0
x, y, z, 1
Run Code Online (Sandbox Code Playgroud)
现在我已经多次查看我的代码了解为什么会出现这种情况,但我似乎无法找出原因,或者我只是错了,是否需要像上面的转置矩阵那样定义转换矩阵?
我的矩阵定义为从左到右,从上到下的一维数组.
以下是我的一些代码可能会有所帮助:
//this is called just before cube is being rendered
void DisplayObject::updateMatrices()
{
modelMatrix = identityMatrix();
modelMatrix = modelMatrix * translateMatrix( xPos, yPos, zPos );
/* update modelview-projection matrix */
mvpMatrix = modelMatrix * (*projMatrix);
}
//this creates my translation matrix which …Run Code Online (Sandbox Code Playgroud) 让 data = [[3,7,2],[1,4,5],[9,8,7]]
假设我想对列表中每个列表的索引的元素求和,比如在矩阵列中添加数字以获得单个列表.我假设数据中的所有列表长度相等.
print foo(data)
[[3,7,2],
[1,4,5],
[9,8,7]]
_______
>>>[13,19,14]
Run Code Online (Sandbox Code Playgroud)
如何迭代列表列表而不会使索引超出范围错误?也许lambda?谢谢!