在for循环中检查numpy数组的维度,然后将二维数据转换为一维数据

我正在使用 polyfit 函数向我的数据集添加趋势线。因为我得到了很多数据集(比这里找到的四个例子多得多),我想创建一个 for 循环来检查数据的维度——正如我们所知,polyfit-function 只接受 1- D 数据。我使用的新手方法np.ravel()是这样的:


import numpy as np


data_a = np.array([1, 2, 3, 4, 5, 6])

data_b = np.array([10, 20, 30, 40, 50, 60])

data_c = np.transpose(np.array([[1, 2, 3, 4, 5, 6]]))

data_d = np.array([[10, 20, 30, 40, 50, 60]])



for items in (data_a, data_b, data_c, data_d):

    if items.ndim == 1:

        print('It is an 1-D array -- no action needed.')

        print(items.ndim)

    elif items.ndim == 2:

        print('It is an 2-D array, please do not be alarmed, I will convert it for you.')

        items.ravel()

        print(items.ndim)

    else:

        print('It contains more than two dimensions.')


print(data_a.ndim)

print(data_b.ndim)

print(data_c.ndim)

print(data_d.ndim)

如果我np.ravel()在 for 循环之外的任何数据集上使用过,它就会像预期的那样工作。例如:


data_c_2 = data_c.ravel()

data_d_2 = data_d.ravel()

但是由于我有很多数据集,我会更好(在我看来,也许是愚蠢的头脑中)在检查维度的同时遍历它。


如果有人能抽出时间帮助我,我将不胜感激。如果有人能解释我在 for 循环中做错了什么,我也将不胜感激,以便我更好地理解它。


千巷猫影
浏览 155回答 1
1回答

慕慕森

对于一个。items.ravel()返回一个新数组。在循环之外,您可以使用以下内容:data = data.ravel()您不能在循环内执行此操作,因为您只会更改循环变量。如果你想“就地”解开,你可以使用np.resize, from the docs:就地更改数组的形状和大小。因此,只需替换:items.ravel()和:items.resize(items.size)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python