我正在使用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循环中做错的事情,以便对它有更好的了解,我也将不胜感激。
谢谢。
答案 0 :(得分:0)
一个。 items.ravel()
返回一个新数组。在循环外,您可以使用类似
data = data.ravel()
您不能在循环内执行此操作,因为您将仅更改循环变量。如果要“就地”旅行,可以使用docs中的np.resize
:
就地更改数组的形状和大小。
因此,只需替换:
items.ravel()
具有:
items.resize(items.size)