首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查一个矩阵是否是Toeplitz矩阵

检查一个矩阵是否是Toeplitz矩阵
EN

Code Golf用户
提问于 2017-05-18 05:45:09
回答 14查看 2.1K关注 0票数 11

您将得到一个二维数组和一个数字,并要求您确定给定的矩阵是否为托普利茨。一个矩阵是一个Toeplitz矩阵,如果每个从左到右的下降对角线只有一个不同的元素。也就是说,它的形式应该是:

输入格式:

您将得到一个函数,它将以two-dimensional矩阵作为参数。

输出格式:

如果矩阵是Toeplitz,则从函数返回1,否则返回-1

约束:

代码语言:javascript
复制
3 < n,m < 10,000,000

其中n是行数,而m是列数。

示例测试用例:

代码语言:javascript
复制
Sample Input :
4 
5
6 7 8 9 2
4 6 7 8 9
1 4 6 7 8
0 1 4 6 7 

Sample Output : 
1 

评分

这是密码-高尔夫,所以以字节为单位的最短答案获胜。

EN

回答 14

Code Golf用户

发布于 2017-05-18 11:24:50

Mathematica,42字节

代码语言:javascript
复制
2Boole[#==ToeplitzMatrix[#&@@@#,#&@@#]]-1&

Mathematica没有内建物来检查某样东西是否是Toeplitz矩阵,但是它有一个内建物来生成一个。因此,我们从输入的第一列(#&@@@#)和第一行(#&@@#)生成一个,并检查它是否等于输入。要将True/False结果转换为1/-1,我们使用Boole (给出10),然后简单地用2x-1转换结果。

票数 7
EN

Code Golf用户

发布于 2017-05-18 06:54:11

八度,30字节

我假设我不必像挑战中所说的那样处理1,000,000,000,000矩阵。这适用于不超过可用内存的矩阵(在我的例子中小于1TB)。

代码语言:javascript
复制
@(x)x==toeplitz(x(:,1),x(1,:))

在网上试试!

这将以一个矩阵x作为输入,并根据第一列和第一行的值创建一个Toeplitz矩阵。然后,它将检查矩阵中的每个元素是否相等。如果所有元素相等,则输入为Toeplitz矩阵。

输出将是与输入相同维度的矩阵。如果输出中有零,那就被认为是假的。

编辑:

刚刚注意到严格的输出格式:

这可以工作41个字节。也许可以从这个版本中去掉一两个字节,但我希望输出规则能够放松一点。

代码语言:javascript
复制
@(x)2*(0||(x==toeplitz(x(:,1),x(1,:))))-1
票数 6
EN

Code Golf用户

发布于 2017-05-18 06:19:26

果冻,5字节

代码语言:javascript
复制
ŒDE€Ạ

在网上试试!

遵循定义这里

代码语言:javascript
复制
ŒDE€Ạ
ŒD     all diagonals
   €   for each diagonal ...
  E       all elements are equal
    Ạ  all diagonal return true
票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/121320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档