加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:29:18 所属栏目:Python 来源:网络整理
导读:我已经在3xN NumPy数组上定义了操作,我想循环遍历数组的每一列. 我试过了: for i in range(nparray.shape[1]): 但是,如果nparray.ndim == 1,则会失败. 是否有一种干净的方法来确定NumPy数组的列数,例如,如果它是一维数组(如MATLAB的大小操作那样),则获得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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读