【问题标题】:Using Python, extracting previous and next item of a matrix in row and column使用 Python,在行和列中提取矩阵的上一项和下一项
【发布时间】:2017-09-19 11:29:31
【问题描述】:

我有一个以下形式的列表矩阵。


Matrix=[[[0,1,2],[3,4,5],[6,7,8],[9,10,11]], [[12,13,14],[15,16,17],[18,19,20],[21,22,23]], [[24,25,26],[27,28,29],[30,31,32],[33,34,35]]]

例如我选择Matrix[i][j],所以我想提取Matrix[i-1][j-1], Matrix[i-1][j], Matrix[i-1][j+1], Matrix[i-1][j-1], Matrix[i][j-1], Matrix[i][j+1], Matrix[i+1][j-1], Matrix[i+1][j] and Matrix[i+1][j+1]

我可以循环执行吗?

【问题讨论】:

  • 我相信你可以,你试过什么?
  • 你的意思是Matrix[i-1][j-1], Matrix[i-1][j], Matrix[i-1][j+1], Matrix[i][j-1], Matrix[i][j], Matrix[i][j+1], Matrix[i+1][j-1], Matrix[i+1][j] and Matrix[i+1][j+1]
  • 是的,我是。但是如果我输入一个整数而不是 'i' 和 'j' 我就不能把它写在一个循环中 - @DmitryPolonskiy
  • 我想在一个元素周围接收 8 个元素。如果选择 Matrix[2][1],答案应该是 Matrix[1][0], Matrix[1][1], Matrix[1][2],..., Matrix[3][1],矩阵[3][2] @user2314737
  • 其实是9个元素

标签: python list matrix arraylist


【解决方案1】:

这应该是你想要的。

首先让我们获取i & j的所有唯一组合

import itertools
import numpy

def uc(nums):
    return set(itertools.product(*((num+1, num-1, num) for num in nums)))

nums = [1,2]

idx = uc(nums)

>>>{(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)}

m = np.array(Matrix)

array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]],

       [[12, 13, 14],
        [15, 16, 17],
        [18, 19, 20],
        [21, 22, 23]],

       [[24, 25, 26],
        [27, 28, 29],
        [30, 31, 32],
        [33, 34, 35]]])

然后我们可以使用来自numpy 的元组索引的强大功能来选择与这些索引匹配的所有行。

[m[idx_] for idx_ in idx]

[array([3, 4, 5]),
 array([18, 19, 20]),
 array([21, 22, 23]),
 array([27, 28, 29]),
 array([15, 16, 17]),
 array([33, 34, 35]),
 array([30, 31, 32]),
 array([ 9, 10, 11]),
 array([6, 7, 8])]

【讨论】:

  • 谢谢。认为这是对的。 @Dmitry Polonskiy
  • 对不起,我不知道。@Dmitry Polonskiy
猜你喜欢
  • 2016-09-25
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2017-09-19
相关资源
最近更新 更多