首页 > 解决方案 > 自索引numpy数组

问题描述

问题:给定 N,返回一个 NxN 矩阵,其第 i,j 个条目是 (i,j)

我决定使用 numpy 通过创建矩阵来解决这个问题

A=    0, 0, 0
      1, 1, 1
      2, 2, 2

B=    0, 1, 2
      0, 1, 2
      0, 1, 2

我现在想要一种方法,它采用相同形状的 numpy 数组并返回元素方式的 zip。显然,您可以通过 NxN 上的 for 循环来做到这一点,但 id 宁愿不这样做。这是我的具体问题:是否有一种方法 SomeKindOfZip(,) 以便

SomeKindOfZip(A,B) =     (0,0), (0,1), (0,2)
                         (1,0), (1,1), (1,2)
                         (2,0), (2,1), (2,2)

标签: python-3.xnumpy

解决方案


有多种方式。用于meshgrid制作 2 数组:

In [20]: I,J=np.meshgrid([0,1,2],[0,1,2,3], indexing='ij')
In [21]: I
Out[21]: 
array([[0, 0, 0, 0],
       [1, 1, 1, 1],
       [2, 2, 2, 2]])
In [22]: J
Out[22]: 
array([[0, 1, 2, 3],
       [0, 1, 2, 3],
       [0, 1, 2, 3]])

stack在新的尾轴上加入它们:

In [23]: np.stack((I,J),axis=2)
Out[23]: 
array([[[0, 0],
        [0, 1],
        [0, 2],
        [0, 3]],

       [[1, 0],
        [1, 1],
        [1, 2],
        [1, 3]],

       [[2, 0],
        [2, 1],
        [2, 2],
        [2, 3]]])

您的显示看起来像一个包含元组的 (3,3) 对象 dtype 数组。对象 dtype 数组更像列表而不是数组。我想它也可以是结构化数组。这完全取决于您打算如何使用结果。


推荐阅读