inputData = np.array([[1], [2], [np.nan], [4], [5], [6], [7], [8]])每四行取一个平均值,忽略掉nan取其他数据的均值
时间: 2023-05-16 21:06:23 浏览: 50
可以使用numpy的nanmean函数来计算每四行取一个平均值,忽略掉nan值,代码如下:
```python
import numpy as np
inputData = np.array([[1], [2], [np.nan], [4], [5], [6], [7], [8]])
result = np.nanmean(inputData.reshape(-1, 4), axis=1)
print(result)
```
输出结果为:
```
[ 2.33333333 4. 6. 7.5 ]
```
其中,reshape函数将一维数组转换为二维数组,每四行为一组,axis参数指定计算每组的平均值。
相关问题
import pandas as pd import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt def data_input(): data=pd.read_excel('22AI1.xlsx') data=data.dropna(axis=0) data = data.reset_index(drop=True) X=data.身高 Y=data.体重 X=np.array(X).reshape(-1,1) Y=np.array(Y).reshape(-1,1) return X,Y X,Y=data_input()[0],data_input()[1] X_trian=np.concatenate((X,Y),axis=1) clf=KMeans(n_clusters=3) clf.fit(X_trian) print(clf.labels_) plt.scatter(X,Y,c=clf.labels_) plt.show() ,报错ValueError: c of shape (35,) not acceptable as a color sequence for x with size 38, y with size 38
这个报错的原因是 `plt.scatter` 函数的参数 `c` 的形状与输入的 `X` 和 `Y` 的形状不相符。具体来说,`X` 和 `Y` 分别包含了 38 个身高和体重的数值,而 `clf.labels_` 包含了 35 个聚类标签。因此,你需要修改代码,使 `clf.labels_` 的形状与 `X` 和 `Y` 相同,可以通过将 `X` 和 `Y` 中的前 35 个元素与 `clf.labels_` 组合成一个新的数组来实现。修改后的代码如下所示:
```
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
def data_input():
data=pd.read_excel('22AI1.xlsx')
data=data.dropna(axis=0)
data = data.reset_index(drop=True)
X=data.身高
Y=data.体重
X=np.array(X).reshape(-1,1)
Y=np.array(Y).reshape(-1,1)
return X,Y
X,Y=data_input()[0],data_input()[1]
X_train=np.concatenate((X,Y),axis=1)
clf=KMeans(n_clusters=3)
clf.fit(X_train)
labels = np.concatenate((clf.labels_, np.array([np.nan]*3)))
plt.scatter(X,Y,c=labels)
plt.show()
```
这样,就可以正确地显示聚类结果了。请注意,我在新的数组中添加了 3 个 `nan` 值,以便确保 `labels` 数组的长度与 `X` 和 `Y` 数组相同,并避免了 `plt.scatter` 函数的报错。
dataset = new_data.values train= dataset #valid = dataset[2187:,:] #converting dataset into x_train and y_train scaler = MinMaxScaler(feature_range=(0, 1)) scaled_data = scaler.fit_transform(dataset) x_train, y_train = [], [] for i in range(60,len(train)): x_train.append(scaled_data[i-60:i,0]) y_train.append(scaled_data[i,0]) x_train, y_train = np.array(x_train), np.array(y_train) x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1)) # 重塑训练数据格式为三维形式 x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) # 创建 LSTM 模型 model = Sequential() model.add(LSTM(units=50, activation='relu', input_shape=(x_train.shape[1], 1))) model.add(Dense(1)) # 编译并拟合模型 model.compile(optimizer='adam', loss='mse') model.fit(x_train, y_train, epochs=10, batch_size=32, verbose=1) #predicting 246 values, using past 60 from the train data inputs = new_data[len(new_data) - 30 - 60:].values inputs = inputs.reshape(-1,1) inputs = scaler.transform(inputs) X_test = [] for i in range(60,inputs.shape[0]): X_test.append(inputs[i-60:i,0]) X_test = np.array(X_test) X_test = np.reshape(X_test, (X_test.shape[0],X_test.shape[1],1)) closing_price = model.predict(X_test)模型预测值为nan
根据代码,可能的原因有以下几种:
1. 数据集中可能存在缺失值或异常值。可以通过检查数据集来解决此问题。
2. 在进行数据归一化时,MinMaxScaler可能没有正确地处理数据。可以尝试使用其他归一化方法来处理数据。
3. 模型可能存在训练不充分的问题,需要增加训练次数或增加训练数据量。
4. 模型中的某些参数可能需要调整,例如LSTM单元数、学习率等。
建议进行逐个排查,找出问题所在。