gpt4 book ai didi

wolfram-mathematica - 使用 Delete 从方阵中删除行和列

转载 作者:行者123 更新时间:2023-12-04 08:14:02 24 4
gpt4 key购买 nike

给定:方阵,list表示要删除的行的索引,同时也表示要删除的列的索引(是方阵,所以只需要一个list)。

输出:方阵,删除列表中的行和列。

假设索引的有效列表。

这是一个例子
enter image description here

所以上面说要删除第二和第四行,以及第二和第四列。

我不知道如何使用 Delete[]同时删除行和列,我真的不想列出我想要删除的每个单独元素索引。

但我可以使用 Delete删除行。

下面是我如何解决它,我首先删除行,然后转置矩阵,然后删除新矩阵的行(这将是原始矩阵的列),然后将结果转回以获得我想要的结果。

像这样:

a = {{0, 5, 2, 3, 1, 0}, {4, 3, 2, 5, 1, 3}, {4, 1, 3, 5, 3, 2}, {4, 
4, 1, 1, 1, 5}, {3, 4, 4, 5, 3, 3}, {5, 1, 4, 5, 2, 0}};
del = {{2}, {4}};
a = Delete[a, del];
a = Delete[Transpose[a], del];
(a = Transpose[a]) // MatrixForm

我的问题:是否有更短的方法使用删除(或其他专家技巧)以更好的方式做到这一点?

谢谢

最佳答案

如果您想删除相同的索引列和行,我会使用 Part .例如看a删除了第 2 和第 4 列和第 4 行:

a[[{1, 3, 5, 6}, {1, 3, 5, 6}]] // MatrixForm

为了使它更通用,您可以创建一些组合 DeleteCases 的东西。与 Range和列/行索引列表,但在没有更多信息的情况下,我还没有尝试这样做(还)。

编辑
remove[a_?MatrixQ, pos_List] := Module[{tmp, length = Length[a]},

tmp = DeleteCases[Range[length], Alternatives @@ pos];

a[[tmp, tmp]]

]

remove[a,{2,4}]
{{0, 2, 1, 0}, {4, 3, 3, 2}, {3, 4, 3, 3}, {5, 4, 2, 0}}

编辑 2
remove2[a_?MatrixQ, pos_List] := Module[{tmp, length = Length[a]},

tmp = Complement[Range[length], pos];

a[[tmp, tmp]]

]

remove2[a,{2,4}]
{{0, 2, 1, 0}, {4, 3, 3, 2}, {3, 4, 3, 3}, {5, 4, 2, 0}}

为您的现实世界问题测试这两个。

关于wolfram-mathematica - 使用 Delete 从方阵中删除行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8753769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com