【问题标题】:Python: general rule for mapping a 2D array onto a larger 2D arrayPython:将二维数组映射到更大的二维数组的一般规则
【发布时间】:2017-02-02 14:40:55
【问题描述】:

假设您有一个 2D numpy 数组,您已对其进行切片以提取其核心,就像您从较大的框架中切出内部框架

较大的框架:

In[0]: import numpy
In[1]: a=numpy.array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]])
In[2]: a
Out[2]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]]) 

内框:

In[3]: b=a[1:-1,1:-1]
Out[3]: 
array([[ 6,  7,  8],
       [11, 12, 13]])

我的问题:如果我想在原始数组a中检索b中每个值的位置,有没有比这更好的方法?

c=numpy.ravel(a) #This will flatten my values in a, so to have a sequential order
d=numpy.ravel(b) #Each element in b will tell me what its corresponding position in a was

【问题讨论】:

  • 我不确定我是否理解您希望您的程序执行的操作。你想输出什么?您在问题结尾处的列表并没有真正计算b 元素在a 中的位置,还是计算了但我只是看不到它?
  • 我的输出是一个一维数组或列表,其中包含a的内框中的值的位置。
  • 你得到的是作为扁平数组的 a 和 b 的元素。那么这些职位如何?它们可能类似于展平数组中的位置,但这只是因为您的元素是数字 0-19。据我了解,对于元素 6,位置类似于 [1, 1],而不是数字 6 本身。你能详细说明你认为元素的“位置”吗?
  • 如果职位直接引用numpy.ravel(a)而不是a,我可以。

标签: python arrays numpy slice


【解决方案1】:
y, x = np.ogrid[1:m-1, 1:n-1]
np.ravel_multi_index((y, x), (m, n))

【讨论】:

    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多