我正在尝试在运行时使用不同的维度索引 numpy.array。要检索例如n*m数组a
的第一行,您可以简单地执行以下操作
a[0,:]
然而,如果发生a是一个1xn向量的情况,上面的代码会返回一个索引错误:
由于代码需要尽可能高效地执行,我不想引入IndexError:太多的索引
if
语句。有没有人有一个方便的解决方案,最好不涉及更改任何数据结构类型?我正在尝试在运行时使用不同的维度索引 numpy.array。要检索例如n*m数组a
的第一行,您可以简单地执行以下操作
a[0,:]
由于代码需要尽可能高效地执行,我不想引入IndexError:太多的索引
if
语句。有没有人有一个方便的解决方案,最好不涉及更改任何数据结构类型?a[0]
而不是a[0,:]
。对于矩阵,它将返回第一行,对于向量,它将返回第一个条目。这是您要寻找的吗?numpy.atleast_2d(a)[0]
。它不会复制您的向量 - 它只会将其作为二维1 x n数组访问。对于数组(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])