将一维numpy数组作为矩阵进行索引

cyvaqqii  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(161)

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

a[0,:]

但是,如果a恰好是 1xn 向量,则上面的代码将返回索引错误:
IndexError:索引太多
由于代码需要尽可能高效地执行,我不想引入if语句。有没有人有一个方便的解决方案,理想情况下不涉及更改任何数据结构类型?

vhmi4jdf

vhmi4jdf1#

只需要使用a[0]而不是a[0,:]。它将返回矩阵的第一行和向量的第一项。这就是您要查找的内容吗?
如果你想得到一维情况下的整个向量,你可以使用numpy.atleast_2d(a)[0],它不会复制你的向量--它只会把它作为一个二维的1 x n数组来访问。

qlfbtfca

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数组。

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

相关问题