将一维的numpy.array作为矩阵进行索引

7

我正在尝试在运行时使用不同的维度索引 numpy.array。要检索例如n*m数组a的第一行,您可以简单地执行以下操作

a[0,:]

然而,如果发生a是一个1xn向量的情况,上面的代码会返回一个索引错误:

IndexError:太多的索引

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

你只有一维和二维数组吗? - Paul
仅仅将数组调整为2D的1xn数组,而不是1D的n长度数组,算作“改变数据结构类型”吗? - Josh Bleecher Snyder
所有这些都是二维数组(mxn)理论上,有些只是恰好是1xn数组,例如m=1。实际上它们表示条件概率表,而当m=1时对应于没有任何依赖关系的变量。 - Alain
2个回答

9
只需使用a[0]而不是a[0,:]。对于矩阵,它将返回第一行,对于向量,它将返回第一个条目。这是您要寻找的吗?
如果您想在一维情况下获取整个向量,则可以使用numpy.atleast_2d(a)[0]。它不会复制您的向量 - 它只会将其作为二维1 x n数组访问。

1
我不知道至少有2个维度;很方便。+1 - Josh Bleecher Snyder
我可以证实,numpy.atleast_2d非常有帮助,正是我正在寻找的。非常感谢。 - Alain

1
'array' or 'matrix'? Which should I use?这一部分的Numpy for Matlab Users维基页面中:

对于数组(array),向量形状1xN、Nx1和N都是不同的东西。像A[:,1]这样的操作返回形状为N的秩-1数组,而不是形状为Nx1的秩-2数组。对秩-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]])

你确定所有的数组都是二维数组吗?还是有一些是一维数组?

如果你想使用array[0,:]这个命令,我建议你使用1xN的二维数组而不是一维数组。以下是一个例子:

>>> 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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接