我已经在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]