问题标签 [toeplitz]
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.
python - Python:使用 scipy.linalg.solve_toeplitz 求解线性 Toeplitz 系统很慢
我正在尝试有效地解决 Python 3.6 中的以下线性系统:
b = A x
其中 A 是 N x N Toeplitz 矩阵(即,从左到右的对角线是常数),x, b 是 N x N 矩阵。在 Scipy 中实现为 scipy.linalg.solve_toeplitz 的 Durbin-Levinson 应该利用 A 的结构有效地解决上述系统,并且当 x,b 是向量时确实可以做到这一点。
但是,当 x, b 是矩阵时,它比 scipy.linalg.solve 和 numpy.linalg.solve 慢得多(请参阅我的测试脚本的输出)
执行时间在我的应用程序中至关重要。我有哪些选择可以加快流程并利用 Toeplitz 结构?
scipy.linalg.solve_toeplitz 速度慢的一个可能解释是,它对矩阵输入使用慢速 for 循环来求解 x、b 为向量的单个线性系统(一次求解每一列)。
脚本输出:
文档:https ://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.linalg.solve_toeplitz.html
python - Toeplitz matrix with an image
I'm struggling to understand something. So far I understood this : x is 3x3 matrix and W is a 2x2 matrix
a) extend W to be a 4X9 matrix and flatten x to be 9x1
b) multiply the Toeplitz matrix and the vector
the part that I don't understand is how can do the same thing with an 400 * 400 image grayscaled before and 3x3 filter.
x = 400 * 400
w = 3 * 3
h = 9 * 160 000
x_flatten = 160 000
output = x_flatten * h ??
I can't figure it out how can I play with the shape to achieve the same principles to be able to retrieve my image after
thank you
matrix - 2D 转置卷积可以表示为 Toeplitz 矩阵乘法吗?
2D 转置卷积运算可以表示为与 Toeplitz 矩阵的矩阵乘法,就像普通卷积可以做的那样?
我想将一些想法从密集网络推广到卷积网络。对于普通卷积,这不是问题,因为它们可以表示为与 Toeplitz 矩阵的矩阵乘法。但是我找不到转置卷积的清晰数学公式,所以我不确定这种情况。
arrays - How to print a circulant matrix (toeplitz), in MATLAB, where each input is a 3D matrix of dimention m x m x 3?
I know how to use toeplitz
function in MATLAB to create a circulant matrix of 1 D vector. However, I am trying to create a circulant block
For example, I have 3 matrices of size (2,2,3) where third dimension is R,G, B: Below I am showing the sample values of row and column of each matrix. First Matrix:
Second Matrix:
Third Matrix:
Now I want to create a circulant matrix which looks like this
Note, I want to be able to move the entire block of the matrix to the right in the subsequent lines, and not just the first line of the matrix. Please note, i want to preserve the third dimensions of these matrices w(which has color dimension in them)
Can someone tell me how to go ahead with it? I thought of making an array I already have a 3D matrix, and don't know how to make an array of the array here, if it will help at all.
References:
- Toeplitz command in MATLAB: https://www.mathworks.com/help/matlab/ref/toeplitz.html
- A Stackoverflow I was trying to understand but couldn't: Matlab: How to convert a matrix into a Toeplitz matrix (not yet sure if i answers my question)
python - 如何使用循环而不是内置函数在 Python 中生成 Toeplitz 矩阵
我正在尝试在 Python 中使用 for 循环生成一个简单的 Toeplitz 矩阵
应该工作,除非我遗漏了什么,但给出了这个错误:
如何在没有 scipy 的内置 toeplitz() 函数的情况下使它成为 Toeplitz 你能帮忙吗?
r - 找出输入是否是 R 中的 Toeplitz 矩阵
给定一个随机矩阵(任意大小!),编写一个函数来确定该矩阵是否为 Toeplitz 矩阵。在线性代数中,托普利茨矩阵是这样一种矩阵,其中从左上角到右下角的任何给定对角线上的元素都是相同的。
这是一个例子:
所以我们的函数应该接收这样的矩阵并在满足条件时返回 TRUE。
要测试该功能,可以使用stats::toeplitz()
生成托普利兹矩阵。例如,我们函数的预期输出应该是:
python - 如何将 scipy convolve2d 应用为矩阵乘法和环绕
tl;博士——scipy 的 convolve2d 实际上是如何进行卷积操作的?我找到了通往 Toeplitz 矩阵的方法,但我对如何实际创建 Toeplitz 矩阵感到困惑。
前几天我在阅读康威的[生命游戏](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life规则),我突然想到游戏中的所有约束都是线性约束,这意味着生命游戏应该符合线性程序形式,因为未来的棋盘状态必须遵循以下线性约束:
游戏板是一个 NxM 矩阵。
计算游戏板中每个节点的邻居所需的内核是一个 3x3 矩阵。
因此我们可以将这个内核应用到游戏板上的每个位置,以计算每个节点的存活邻居的数量。然后我们可以对邻居计数应用约束,这将确定给定节点是打开还是关闭并生成下一个板状态。
但是,要使用凸求解器,例如 cvx,您不能传入 convolve2d 之类的函数,而是需要传入该函数对其自身进行编码的矩阵。
为了得到我们的线性算子,我们可以从一个简单的版本开始。我们可以手动提取 game_board 的正确组件(一个 nxm 矩阵)并将其与邻居内核相乘:https ://imgur.com/a/desSZAd 。但这似乎真的很脆弱,需要大量的手工计算。
所以,我想,如果我们把 game_board 展平呢?然后我们仍然需要将我们的内核应用到每个正确的权重上,但这应该有一些关于内核如何移动游戏板的结构。
第一个图像是扁平化。第二个图像是循环和堆叠内核向量以将卷积应用为一个 MM。第三个图像是移位内核与游戏板的乘积。
我又做了几个 Gamma 术语,显然有一些结构,但我没有看到如何以编程方式创建它。
所有这些都让我想到了 Toeplitz 矩阵,这似乎正是我正在寻找的。我正在应用此处找到的方法:https ://stackoverflow.com/a/51865516/8334507但是当我这样做时我没有得到wrap
-ing 功能,它还将我的输出矩阵的维度扩展到(N+2)x(M+2)
所以,一个 8x8 板变成 10x10。
r - 从向量制作对称矩阵
我必须将向量转换为矩阵
结果矩阵应为
我知道它是一种 toeplitz 矩阵,并且 R 中有可用的包,但我必须使用嵌套的 for 循环来做到这一点。