self.history_x = [init_x] 中[init_x]为什么要加括号
时间: 2023-05-13 16:05:44 浏览: 54
[init_x]加括号是为了将其作为一个列表传递给self.history_x,即使只有一个元素,也需要将其放在列表中。这是因为在Python中,列表是可变对象,而单个元素不是,因此需要将其放在列表中以便在后续操作中能够修改它。
相关问题
class Point: def __init__(self, x, y): self.__x = x self.__y = y def __add__(self, other): x = self.__x + other.__x y = self.__y + other.__y return Point(x, y) def __sub__(self, other): x = self.__x - other.__x y = self.__y - other.__y return Point(x, y) def __mul__(self, a): x = self.__x * a y = self.__y * a return Point(x, y) def __truediv__(self, a): x = self.__x / a y = self.__y / a return Point(x, y) r1 = Point(10, 20) r2 = Point(5, 5) print(r1+r2) print(r1-r2) print(r1*2) print(r1/2)代码改进,输出向量坐标
为了输出向量坐标,我们可以在 Point 类中添加一个方法来返回坐标的元组,如下所示:
```python
class Point:
def __init__(self, x, y):
self.__x = x
self.__y = y
def __add__(self, other):
x = self.__x + other.__x
y = self.__y + other.__y
return Point(x, y)
def __sub__(self, other):
x = self.__x - other.__x
y = self.__y - other.__y
return Point(x, y)
def __mul__(self, a):
x = self.__x * a
y = self.__y * a
return Point(x, y)
def __truediv__(self, a):
x = self.__x / a
y = self.__y / a
return Point(x, y)
def get_coordinates(self):
return (self.__x, self.__y)
```
然后我们就可以使用这个方法来输出向量坐标了,示例如下:
```python
r1 = Point(10, 20)
r2 = Point(5, 5)
print(r1+r2.get_coordinates()) # 输出 (15, 25)
print(r1-r2.get_coordinates()) # 输出 (5, 15)
print(r1*2).get_coordinates()) # 输出 (20, 40)
print(r1/2).get_coordinates()) # 输出 (5.0, 10.0)
```
class Net(nn.Module): def __init__(self,input_size,hidden_size,num_layers,output_size,batch_size,seq_length) -> None: super(Net,self).__init__() self.input_size=input_size self.hidden_size=hidden_size self.num_layers=num_layers self.output_size=output_size self.batch_size=batch_size self.seq_length=seq_length self.num_directions=1 # 单向LSTM self.lstm=nn.LSTM(input_size=input_size,hidden_size=hidden_size,num_layers=num_layers,batch_first=True) # LSTM层 self.fc=nn.Linear(hidden_size,output_size) # 全连接层 def forward(self,x): # e.g. x(10,3,100) 三个句子,十个单词,一百维的向量,nn.LSTM(input_size=100,hidden_size=20,num_layers=4) # out.shape=(10,3,20) h/c.shape=(4,b,20) batch_size, seq_len = x.size()[0], x.size()[1] # x.shape=(604,3,3) h_0 = torch.randn(self.num_directions * self.num_layers, x.size(0), self.hidden_size) c_0 = torch.randn(self.num_directions * self.num_layers, x.size(0), self.hidden_size) # output(batch_size, seq_len, num_directions * hidden_size) output, _ = self.lstm(x, (h_0, c_0)) # output(5, 30, 64) pred = self.fc(output) # (5, 30, 1) pred = pred[:, -1, :] # (5, 1) return pred改成python代码
这段代码是一个简单的使用 PyTorch 实现的 LSTM 模型。下面是将其转化为 Python 代码的版本:
```python
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, output_size, batch_size, seq_length):
super(Net, self).__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.num_layers = num_layers
self.output_size = output_size
self.batch_size = batch_size
self.seq_length = seq_length
self.num_directions = 1 # 单向LSTM
# LSTM层
self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers, batch_first=True)
# 全连接层
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
# x.shape=(10,3,100),三个句子,十个单词,一百维的向量
# out.shape=(10,3,20),h/c.shape=(4,b,20)
batch_size, seq_len = x.size()[0], x.size()[1]
h_0 = torch.randn(self.num_directions * self.num_layers, x.size(0), self.hidden_size)
c_0 = torch.randn(self.num_directions * self.num_layers, x.size(0), self.hidden_size)
output, _ = self.lstm(x, (h_0, c_0)) # output(batch_size, seq_len, num_directions * hidden_size)
pred = self.fc(output) # (5, 30, 1)
pred = pred[:, -1, :] # (5, 1)
return pred
```