import numpy as np n = int(input('输入每个维度的元素个数:')) a = np.arange(1,n**2+1).reshape(n,n) res = np.trace(a) print('矩阵的迹为',res)怎么把输出中的空格去掉
时间: 2024-03-23 07:43:23 浏览: 23
可以在print函数中使用参数sep来设置分隔符,将其设置为空字符串即可去掉输出中的空格。修改后的代码如下:
```python
import numpy as np
n = int(input('输入每个维度的元素个数:'))
a = np.arange(1,n**2+1).reshape(n,n)
res = np.trace(a)
print('矩阵的迹为', res, sep='')
```
这样输出的结果中就不会再有空格了。
相关问题
将冒号后面的代码改写成一个nn.module类:import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import Dense, LSTM data1 = pd.read_csv("终极1.csv", usecols=[17], encoding='gb18030') df = data1.fillna(method='ffill') data = df.values.reshape(-1, 1) scaler = MinMaxScaler(feature_range=(0, 1)) data = scaler.fit_transform(data) train_size = int(len(data) * 0.8) test_size = len(data) - train_size train, test = data[0:train_size, :], data[train_size:len(data), :] def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return np.array(dataX), np.array(dataY) look_back = 30 trainX, trainY = create_dataset(train, look_back) testX, testY = create_dataset(test, look_back) trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1])) model = Sequential() model.add(LSTM(50, input_shape=(1, look_back), return_sequences=True)) model.add(LSTM(50)) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=6, batch_size=1, verbose=2) trainPredict = model.predict(trainX) testPredict = model.predict(testX) trainPredict = scaler.inverse_transform(trainPredict) trainY = scaler.inverse_transform([trainY]) testPredict = scaler.inverse_transform(testPredict) testY = scaler.inverse_transform([testY])
以下是将代码改写成一个nn.module类:
```python
import torch.nn as nn
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, LSTM
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, output_size, num_layers, look_back):
super().__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.look_back = look_back
self.lstm1 = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
self.lstm2 = nn.LSTM(hidden_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)
c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)
x = x.view(-1, self.look_back, 1)
out, _ = self.lstm1(x, (h0, c0))
out, _ = self.lstm2(out, (h0, c0))
out = self.fc(out[:, -1, :])
return out
data1 = pd.read_csv("终极1.csv", usecols=[17], encoding='gb18030')
df = data1.fillna(method='ffill')
data = df.values.reshape(-1, 1)
scaler = MinMaxScaler(feature_range=(0, 1))
data = scaler.fit_transform(data)
train_size = int(len(data) * 0.8)
test_size = len(data) - train_size
train, test = data[0:train_size, :], data[train_size:len(data), :]
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
dataX.append(a)
dataY.append(dataset[i + look_back, 0])
return np.array(dataX), np.array(dataY)
look_back = 30
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = LSTMModel(input_size=1, hidden_size=50, output_size=1, num_layers=2, look_back=look_back).to(device)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
num_epochs = 6
for epoch in range(num_epochs):
for i, (inputs, labels) in enumerate(zip(trainX, trainY)):
inputs = torch.from_numpy(inputs).float().to(device)
labels = torch.from_numpy(labels).float().to(device)
outputs = model(inputs)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i+1) % 100 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(trainX)}], Loss: {loss.item():.4f}')
model.eval()
trainPredict = scaler.inverse_transform(model(torch.from_numpy(trainX).float().to(device)).detach().cpu().numpy())
testPredict = scaler.inverse_transform(model(torch.from_numpy(testX).float().to(device)).detach().cpu().numpy())
trainY = scaler.inverse_transform([trainY])
testY = scaler.inverse_transform([testY])
```
这个类接受5个参数,分别是:
- input_size: LSTM的输入维度,对于这个例子来说,input_size=1
- hidden_size: LSTM的隐藏层维度
- output_size: LSTM的输出维度,对于这个例子来说,output_size=1
- num_layers: LSTM的层数
- look_back: 每个样本的序列长度,对于这个例子来说,look_back=30
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense, LSTM from sklearn.metrics import r2_score,median_absolute_error,mean_absolute_error # 读取数据 data = pd.read_csv(r'C:/Users/Ljimmy/Desktop/yyqc/peijian/销量数据rnn.csv') # 取出特征参数 X = data.iloc[:,2:].values # 数据归一化 scaler = MinMaxScaler(feature_range=(0, 1)) X[:, 0] = scaler.fit_transform(X[:, 0].reshape(-1, 1)).flatten() #X = scaler.fit_transform(X) #scaler.fit(X) #X = scaler.transform(X) # 划分训练集和测试集 train_size = int(len(X) * 0.8) test_size = len(X) - train_size train, test = X[0:train_size, :], X[train_size:len(X), :] # 转换为监督学习问题 def create_dataset(dataset, look_back=1): X, Y = [], [] for i in range(len(dataset) - look_back - 1): a = dataset[i:(i + look_back), :] X.append(a) Y.append(dataset[i + look_back, 0]) return np.array(X), np.array(Y) look_back = 12 X_train, Y_train = create_dataset(train, look_back) #Y_train = train[:, 2:] # 取第三列及以后的数据 X_test, Y_test = create_dataset(test, look_back) #Y_test = test[:, 2:] # 取第三列及以后的数据 # 转换为3D张量 X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1)) X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) # 构建LSTM模型 model = Sequential() model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1))) model.add(LSTM(units=50)) model.add(Dense(units=1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(X_train, Y_train, epochs=5, batch_size=32) #model.fit(X_train, Y_train.reshape(Y_train.shape[0], 1), epochs=10, batch_size=32) # 预测下一个月的销量 last_month_sales = data.tail(12).iloc[:,2:].values #last_month_sales = data.tail(1)[:,2:].values last_month_sales = scaler.transform(last_month_sales) last_month_sales = np.reshape(last_month_sales, (1, look_back, 1)) next_month_sales = model.predict(last_month_sales) next_month_sales = scaler.inverse_transform(next_month_sales) print('Next month sales: %.0f' % next_month_sales[0][0]) # 计算RMSE误差 rmse = np.sqrt(np.mean((next_month_sales - last_month_sales) ** 2)) print('Test RMSE: %.3f' % rmse)IndexError Traceback (most recent call last) Cell In[1], line 36 33 X_test, Y_test = create_dataset(test, look_back) 34 #Y_test = test[:, 2:] # 取第三列及以后的数据 35 # 转换为3D张量 ---> 36 X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1)) 37 X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) 38 # 构建LSTM模型 IndexError: tuple index out of range代码修改
在代码中,X_train 和 X_test 的维度为 (样本数量,时间步长),需要将其转换为 (样本数量,时间步长,特征数量) 的形式。因此在创建数据集时,需要将数据 reshape 为 (样本数量,时间步长,1),即每个时间步长只有一个特征。代码如下:
```
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset) - look_back - 1):
a = dataset[i:(i + look_back), :]
X.append(a.reshape(-1, 1))
Y.append(dataset[i + look_back, 0])
return np.array(X), np.array(Y)
```
在训练和测试数据集转换为3D张量时,需要保证第三个维度为特征数量。因此需要修改如下代码:
```
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
```
修改后的完整代码如下:
```
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
from sklearn.metrics import r2_score,median_absolute_error,mean_absolute_error
# 读取数据
data = pd.read_csv(r'C:/Users/Ljimmy/Desktop/yyqc/peijian/销量数据rnn.csv')
# 取出特征参数
X = data.iloc[:,2:].values
# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
X = scaler.fit_transform(X)
# 划分训练集和测试集
train_size = int(len(X) * 0.8)
test_size = len(X) - train_size
train, test = X[0:train_size, :], X[train_size:len(X), :]
# 转换为监督学习问题
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset) - look_back - 1):
a = dataset[i:(i + look_back), :]
X.append(a.reshape(-1, 1))
Y.append(dataset[i + look_back, 0])
return np.array(X), np.array(Y)
look_back = 12
X_train, Y_train = create_dataset(train, look_back)
X_test, Y_test = create_dataset(test, look_back)
# 转换为3D张量
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
# 构建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(LSTM(units=50))
model.add(Dense(units=1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, Y_train, epochs=5, batch_size=32)
# 预测下一个月的销量
last_month_sales = data.tail(12).iloc[:,2:].values
last_month_sales = scaler.transform(last_month_sales)
last_month_sales = np.reshape(last_month_sales, (1, look_back, 1))
next_month_sales = model.predict(last_month_sales)
next_month_sales = scaler.inverse_transform(next_month_sales)
print('Next month sales: %.0f' % next_month_sales[0][0])
# 计算RMSE误差
rmse = np.sqrt(np.mean((next_month_sales - last_month_sales) ** 2))
print('Test RMSE: %.3f' % rmse)
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)