首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想按照行和列的位置重新排列一个数组,在Python中怎么做?

我想按照行和列的位置重新排列一个数组,在Python中怎么做?
EN

Stack Overflow用户
提问于 2020-07-25 13:32:41
回答 1查看 57关注 0票数 1

在R中,我的想法是用Python语言来做,如果我在Python语言中应用M[index],顺序与R中的结果不同。

R中的代码:

代码语言:javascript
复制
> M = matrix(c("a",0,"z",
+               0,0,"b",
+               "c","y",0), nrow = 3, byrow = TRUE)
> M
     [,1] [,2] [,3]
[1,] "a"  "0"  "z" 
[2,] "0"  "0"  "b" 
[3,] "c"  "y"  "0" 
> 
> index = c(3,2,1)
> 
> M[index,index]
     [,1] [,2] [,3]
[1,] "0"  "y"  "c" 
[2,] "b"  "0"  "0" 
[3,] "z"  "0"  "a" 
> 

Python中的代码:

代码语言:javascript
复制
M = np.array([["a",0,"z"],
                  [0,0,"b"],
                  ["c","y",0]])
index = [2,1,0]

print(M[index])
array([['c', 'y', '0'],
       ['0', '0', 'b'],
       ['a', '0', 'z']], dtype='<U1')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-25 13:55:09

您可以使用np.flipudnp.fliplr

代码语言:javascript
复制
>>> M = np.array([["a",0,"z"],
                  [0,0,"b"],
                  ["c","y",0]])
>>> np.fliplr(np.flipud(M))
array([['0', 'y', 'c'],
       ['b', '0', '0'],
       ['z', '0', 'a']], dtype='<U1')

或者,您可以使用np.rot90旋转90度,两次

代码语言:javascript
复制
>>> np.rot90(M, 2)
array([['0', 'y', 'c'],
       ['b', '0', '0'],
       ['z', '0', 'a']], dtype='<U1')

如果你喜欢按索引来做,你可以这样做:

代码语言:javascript
复制
>>> index = [2,1,0]
>>> M[index, ::-1]
array([['0', 'y', 'c'],
       ['b', '0', '0'],
       ['z', '0', 'a']], dtype='<U1')
# or,
>>> M[::-1, index]
array([['0', 'y', 'c'],
       ['b', '0', '0'],
       ['z', '0', 'a']], dtype='<U1')

它本质上类似于:

代码语言:javascript
复制
>>> M[::-1, ::-1]
array([['0', 'y', 'c'],
       ['b', '0', '0'],
       ['z', '0', 'a']], dtype='<U1')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63084759

复制
相关文章

相似问题

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