empty_index_list = np.argwhere(np.array(state) == 0)
时间: 2023-05-20 09:06:28 浏览: 60
这是一个关于 numpy 库中的 argwhere 函数的问题,它可以返回一个数组中所有满足条件的元素的索引。在这个例子中,我们使用 np.array(state) 将 state 转换为 numpy 数组,然后使用 == 0 来判断数组中哪些元素的值为 0,最后使用 argwhere 函数返回这些元素的索引。empty_index_list 将会是一个包含所有值为 0 的元素索引的列表。如果您需要更多关于 numpy 库的信息,可以参考 numpy 官方文档。
相关问题
train_fea = np.array([[]])
`train_fea = np.array([[]])` 这行代码创建了一个行数为 1,列数为 0 的二维空数组。这个数组中没有任何元素,因为第二个方括号中没有任何元素。
如果你需要创建一个空的二维数组,可以使用以下代码:
```python
import numpy as np
train_fea = np.empty((0, n)) # n 为列数
```
其中,`(0, n)` 表示行数为 0,列数为 `n` 的二维数组。这个数组中没有任何元素,但是可以向其中添加元素。如果你希望创建一个全是 0 的二维数组,可以使用 `np.zeros()` 方法,例如:
```python
import numpy as np
train_fea = np.zeros((0, n)) # n 为列数
```
这样就创建了一个行数为 0,列数为 `n`,元素全部为 0 的二维数组。
import torch import os import torch.nn as nn import torch.optim as optim import numpy as np import random import matplotlib.pyplot as plt class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 16, kernel_size=3,stride=1) self.pool = nn.MaxPool2d(kernel_size=2,stride=2) self.conv2 = nn.Conv2d(16, 32, kernel_size=3,stride=1) self.fc1 = nn.Linear(32 * 9 * 9, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 2) def forward(self, x): x = self.pool(nn.functional.relu(self.conv1(x))) x = self.pool(nn.functional.relu(self.conv2(x))) x = x.view(-1, 32 * 9 * 9) x = nn.functional.relu(self.fc1(x)) x = nn.functional.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) folder_path1 = 'random_matrices2' # 创建空的tensor x = torch.empty((40, 1, 42, 42)) # 遍历文件夹内的文件,将每个矩阵转化为tensor并存储 for j in range(40): for j in range(40): file_name = 'matrix_{}.npy'.format(i) file_path1 = os.path.join(folder_path1, file_name) matrix1 = np.load(file_path1) x[j] = torch.from_numpy(matrix1).unsqueeze(0) folder_path2 = 'random_label2' y = torch.empty((40, 1)) for k in range(40): for k in range(40): file_name = 'label_{}.npy'.format(i) file_path2 = os.path.join(folder_path2, file_name) matrix2 = np.load(file_path2) y[k] = torch.from_numpy(matrix2).unsqueeze(0) losses = [] for epoch in range(10): running_loss = 0.0 for i in range(40): inputs, labels = x[i], y[i] optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() losses.append(running_loss / 40) print('[%d] loss: %.3f' % (epoch + 1, running_loss / 40)) print('Finished Training') plt.plot(losses) plt.xlabel('Epoch') plt.ylabel('Loss') plt.show() 报错:
在第14行的for循环中,两个变量的名字都是j,应该将其中一个改为k。此外,在第19行的for循环中,变量i并未定义,应该将其改为k。最后,在第28行的loss.backward()中,需要将labels从tensor类型转换为long类型,即loss.backward()改为loss.backward(torch.tensor([1], dtype=torch.long)). 修改后的代码如下:
```
import torch
import os
import torch.nn as nn
import torch.optim as optim
import numpy as np
import random
import matplotlib.pyplot as plt
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 16, kernel_size=3,stride=1)
self.pool = nn.MaxPool2d(kernel_size=2,stride=2)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3,stride=1)
self.fc1 = nn.Linear(32 * 9 * 9, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 2)
def forward(self, x):
x = self.pool(nn.functional.relu(self.conv1(x)))
x = self.pool(nn.functional.relu(self.conv2(x)))
x = x.view(-1, 32 * 9 * 9)
x = nn.functional.relu(self.fc1(x))
x = nn.functional.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
folder_path1 = 'random_matrices2'
# 创建空的tensor
x = torch.empty((40, 1, 42, 42))
# 遍历文件夹内的文件,将每个矩阵转化为tensor并存储
for j in range(40):
file_name = 'matrix_{}.npy'.format(j)
file_path1 = os.path.join(folder_path1, file_name)
matrix1 = np.load(file_path1)
x[j] = torch.from_numpy(matrix1).unsqueeze(0)
folder_path2 = 'random_label2'
y = torch.empty((40,))
# 遍历文件夹内的文件,将每个标签转化为tensor并存储
for k in range(40):
file_name = 'label_{}.npy'.format(k)
file_path2 = os.path.join(folder_path2, file_name)
matrix2 = np.load(file_path2)
y[k] = torch.from_numpy(matrix2)
losses = []
for epoch in range(10):
running_loss = 0.0
for i in range(40):
inputs, labels = x[i], y[i].long()
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward(torch.tensor([1], dtype=torch.long))
optimizer.step()
running_loss += loss.item()
losses.append(running_loss / 40)
print('[%d] loss: %.3f' % (epoch + 1, running_loss / 40))
print('Finished Training')
plt.plot(losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
```