我试图在运行时使用不同的维度索引 numpy.array 。要检索例如n * m数组a
的第一行,你可以简单地做
a[0,:]
但是,如果恰好是 1xn 向量,则上面的代码会返回索引错误:
IndexError:索引太多
由于代码需要尽可能高效地执行,我不想引入if
语句。有没有人有一个方便的解决方案,理想情况下不涉及更改任何数据结构类型?
答案 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])