python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > numpy选择特定行列

Python的numpy选择特定行列的方法

作者:goodxin_ie

这篇文章主要介绍了Python的numpy选择特定行列的方法,有时需要抽取矩阵中特定行的特定列,比如,需要抽取矩阵x的0,1行的0,3列,结果为矩阵域,需要的朋友可以参考下

numpy选择特定行列

有时需要抽取矩阵中特定行的特定列。

比如,需要抽取矩阵x的0,1行的0,3列,结果为矩阵域

x = np.array([[ 0,  1,  2,  3],
               [ 4,  5,  6,  7],
               [ 8,  9, 10, 11],
               [12, 13, 14, 15]])
y = np.array([[ 0,  3],
              [ 4,  7]])

错误做法:第一反应这样写x[[0,1],[0,3]],然而得到的结果为

y
Out[22]: array([0, 7])

其实这种写法是抽去了[0,0],[1,3]两个位置的数。numpy的所有维度的坐标个数应该相等,且互相是配对的。

Numpy数组的整数数组索引,返回数据副本,而不是创建视图。相比切片索引,整数数组的索引更具有通用性,因为其不要求索引值具有特定规律。

整数数组索引要点如下:

正确的做法有以下几种:

1、先抽取行,再抽取列

 x[[0,1]][:,[0,3]]
Out[31]: 
array([[0, 3],
       [4, 7]])

2、由于结果数组与索引数组具有相同形状,且这些结果值对应于各维索引集的索引在索引数组中的位置,因此可以直接写目标数据的坐标

index = [[[0,0],[1,1]],[[0,3],[0,3]]]
x[index]
Out[33]: 
array([[0, 3],
       [4, 7]])

此种做法也可以利用numpy的广播机制,写为

x[[0,1],[[0],[3]]]
Out[39]: 
array([[0, 4],
       [3, 7]])

注意与开始的错误写法对比

3、Numpy提供的函数 ix_() 更快地实现索引指定行列

ix_(*args)
    Construct an open mesh from multiple sequences.
    This function takes N 1-D sequences and returns N outputs with N
    dimensions each, such that the shape is 1 in all but one dimension
    and the dimension with the non-unit shape value cycles through all
    N dimensions.
    Using `ix_` one can quickly construct index arrays that will index
    the cross product. ``a[np.ix_([1,3],[2,5])]`` returns the array
    ``[[a[1,2] a[1,5]], [a[3,2] a[3,5]]]``.

写法为:

i,j = np.ix_([0,1],[0,3]) 
x[i,j]
Out[44]: 
array([[0, 3],
       [4, 7]])

到此这篇关于Python的numpy选择特定行列的方法的文章就介绍到这了,更多相关numpy选择特定行列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文