在for循环中检查numpy数组的尺寸,然后将2D数据转换为1D数据

时间:2019-02-01 14:18:48

标签: python python-3.x numpy

我正在使用polyfit函数将趋势线添加到数据集中。由于我有很多数据集(比这里找到的四个示例要多得多),所以我想进行一个for循环以检查数据的维度-众所周知,polyfit函数仅接受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)

如果我在for循环外的任何数据集上使用了np.ravel(),它的工作原理将与预期的一样。例如:

data_c_2 = data_c.ravel()
data_d_2 = data_d.ravel()

但是由于我有很多数据集,所以(在我的愚蠢头脑中)最好在检查维度时对其进行迭代。

如果有人能找到时间帮助我,我将不胜感激。如果有人可以解释我在for循环中做错的事情,以便对它有更好的了解,我也将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

一个。 items.ravel()返回一个新数组。在循环外,您可以使用类似

的内容:
data = data.ravel()

您不能在循环内执行此操作,因为您将仅更改循环变量。如果要“就地”旅行,可以使用docs中的np.resize

  

就地更改数组的形状和大小。

因此,只需替换:

items.ravel()

具有:

items.resize(items.size)