我正在尝试在运行时对一个维度可变的 numpy.array 进行索引。例如,要检索一个n*m数组a的第一行,您可以简单地执行以下操作
a
a[0,:]
但是,如果a恰好是 1xn 向量,则上面的代码将返回索引错误:IndexError:索引太多由于代码需要尽可能高效地执行,我不想引入if语句。有没有人有一个方便的解决方案,理想情况下不涉及更改任何数据结构类型?
if
vhmi4jdf1#
只需要使用a[0]而不是a[0,:]。它将返回矩阵的第一行和向量的第一项。这就是您要查找的内容吗?如果你想得到一维情况下的整个向量,你可以使用numpy.atleast_2d(a)[0],它不会复制你的向量--它只会把它作为一个二维的1 x n数组来访问。
a[0]
numpy.atleast_2d(a)[0]
qlfbtfca2#
从Numpy for Matlab Users wiki页面的 “array”或“matrix”?我应该使用哪个? 部分:对于数组,矢量形状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 2d数组而不是1d数组。
array[0,:]
>>> 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])
2条答案
按热度按时间vhmi4jdf1#
只需要使用
a[0]
而不是a[0,:]
。它将返回矩阵的第一行和向量的第一项。这就是您要查找的内容吗?如果你想得到一维情况下的整个向量,你可以使用
numpy.atleast_2d(a)[0]
,它不会复制你的向量--它只会把它作为一个二维的1 x n数组来访问。qlfbtfca2#
从Numpy for Matlab Users wiki页面的 “array”或“matrix”?我应该使用哪个? 部分:
对于数组,矢量形状1xN、Nx1和N都是不同的东西。类似A[:,1]的操作返回形状N的秩为1的数组,而不是形状Nx1的秩为2的数组。对秩为1的数组进行转置不会执行任何操作。
下面的例子说明了它们的不同之处:
那么,你确定你的所有数组都是二维数组,还是其中一些是一维数组?
如果你想使用
array[0,:]
命令,我建议你实际上使用1xN 2d数组而不是1d数组。