索引一维numpy.array作为矩阵

时间:2011-01-17 18:45:15

标签: python numpy

我试图在运行时使用不同的维度索引 numpy.array 。要检索例如n * m数组a的第一行,你可以简单地做

a[0,:]

但是,如果恰好是 1xn 向量,则上面的代码会返回索引错误:

  

IndexError:索引太多

由于代码需要尽可能高效地执行,我不想引入if语句。有没有人有一个方便的解决方案,理想情况下不涉及更改任何数据结构类型?

2 个答案:

答案 0 :(得分:9)

只需使用a[0]代替a[0,:]。它将返回矩阵的第一行和向量的第一个条目。这是你在找什么?

如果你想在一维情况下得到整个向量,你可以使用numpy.atleast_2d(a)[0]。它不会复制你的矢量 - 它只是作为一个二维1 x n阵列访问它。

答案 1 :(得分:1)

来自'array' or 'matrix'? Which should I use?维基页面的Numpy for Matlab Users部分:

  

对于数组,向量形状1xN,Nx1和N都是不同的东西。像A [:,1]这样的操作返回形状N的rank-1数组,而不是形状Nx1的rank-2。在rank-1数组上进行转置什么都不做。

以下示例显示它们不相同:

>>> import numpy as np
>>> a1 = np.array([1,2,3])
>>> a1
array([1, 2, 3])
>>> a2 = np.array([[1,2,3]])    // Notice the two sets of brackets
>>> a2
array([[1, 2, 3]])
>>> a3 = np.array([[1],[2],[3]])
>>> a3
array([[1],
       [2],
       [3]])

那么,你确定你的所有数组都是2d数组,还是其中一些是1d数组?

如果你想使用array[0,:]的命令,我建议实际使用1xN 2d数组而不是1d数组。这是一个例子:

>>> a2 = np.array([[1,2,3]])    // Notice the two sets of brackets
>>> a2
array([[1, 2, 3]])
>>> a2[0,:]
array([1, 2, 3])
>>> b2 = np.array([[1,2,3],[4,5,6]])
>>> b2
array([[1, 2, 3],
       [4, 5, 6]])
>>> b2[0,:]
array([1, 2, 3])