python – 获取NumPy数组中的列数的函数,如果它是1D数组,则返回1

我已经在3xN NumPy数组上定义了操作,我想循环遍历数组的每一列.

我试过了:

for i in range(nparray.shape[1]):

但是,如果nparray.ndim == 1,则会失败.

是否有一种干净的方法来确定NumPy数组的列数,例如,如果它是一维数组(如MATLAB的大小操作那样),则获得1?

否则,我已实施:

if nparray.ndim == 1:
    num_points = 1
else:
    num_points = nparray.shape[1]

for i in range(num_points):

最佳答案 如果你只是在寻找不那么冗长的东西,你可以这样做:

num_points = np.atleast_2d(nparray).shape[1]

当然,这将使一个新的临时阵列只是为了形成它,这有点傻……但它会相当便宜,因为它只是一个相同内存的视图.

但是,我认为你的显式代码更具可读性,除了我可以尝试一下:

try:
    num_points = nparray.shape[1]
except IndexError:
    num_points = 1

如果你反复这样做,不管你做什么,都应该将它包装在一个函数中.例如:

def num_points(arr, axis):
    try:
        return arr.shape[axis]
    except IndexError:
        return 1

那么你要写的就是:

for i in range(num_points(nparray, 1)):

当然,这意味着你可以通过编辑一个地方来改变世界各地,例如:

def num_points(arr, axis):
    return nparray[:,...,np.newaxis].shape[1]
点赞