import torch def AddDataToTorch(oriData, newData, addDim): if (oriData.numel() != 0): if (len(oriData.shape) > addDim) and (len(newData.shape) > addDim): return torch.cat((oriData.view(-1, 1), newData.view(-1, 1)), dim = addDim) else: return torch.cat((oriData.view(-1, 1), newData.view(-1, 1)), dim = 0) mergeData = torch.Tensor() tmpData = torch.randn(3) for i in range(1, 10): mergeData = AddDataToTorch(mergeData, tmpData, 1) 这段代码为什么提示AttributeError: 'NoneType' object has no attribute 'numel'
时间: 2023-06-26 20:09:02 浏览: 180
这是因为在第一次调用`AddDataToTorch`时,`oriData`是空的,即为`NoneType`,没有`numel()`属性。你可以在调用`AddDataToTorch`之前添加一个判断语句,在`oriData`为空时进行特殊处理,如返回`newData`本身或创建一个大小为`newData`的新张量。例如:
```
import torch
def AddDataToTorch(oriData, newData, addDim):
if oriData is None:
return newData
elif (len(oriData.shape) > addDim) and (len(newData.shape) > addDim):
return torch.cat((oriData.view(-1, 1), newData.view(-1, 1)), dim=addDim)
else:
return torch.cat((oriData.view(-1, 1), newData.view(-1, 1)), dim=0)
mergeData = None
tmpData = torch.randn(3)
for i in range(1, 10):
mergeData = AddDataToTorch(mergeData, tmpData, 1)
```
这样就可以避免该错误。
相关问题
import torch def AddDataToTorch(oriData, newData, addDim): if oriData is None: return newData else: if (len(oriData.shape) > addDim) and (len(newData.shape) > addDim): return torch.cat((oriData, newData), dim = addDim) else: return torch.cat((oriData, newData), dim = 1) mergeData = None tmpData = torch.randn(3) print(tmpData.shape) for i in range(1, 10): print('indx = ') print(i) mergeData = AddDataToTorch(mergeData, tmpData, 0) print(mergeData.shape) 这段代码如何修改能输出9行3列的torch
可以将代码修改为以下形式:
```
import torch
def AddDataToTorch(oriData, newData, addDim):
if oriData is None:
return newData
else:
if (len(oriData.shape) > addDim) and (len(newData.shape) > addDim):
return torch.cat((oriData, newData), dim = addDim)
else:
return torch.cat((oriData, newData), dim = 1)
mergeData = None
tmpData = torch.randn(1, 3) # 修改这里,生成1行3列的随机数张量
print(tmpData.shape)
for i in range(1, 10):
print('indx = ')
print(i)
mergeData = AddDataToTorch(mergeData, tmpData, 0)
print(mergeData.shape) # 输出9行3列的张量
```
将 `tmpData` 的随机数张量修改为 1 行 3 列的张量,然后在循环中使用 `AddDataToTorch` 方法将其添加到 `mergeData` 中,最后输出结果张量 `mergeData` 的形状即可。
def AddDataToTorch(oriData, newData, addDim): if oriData is None: return newData elif (len(oriData.shape) > addDim) and (len(newData.shape) > addDim): return torch.cat((oriData.view(-1, 1), newData.view(-1, 1)), dim=addDim) else: return torch.cat((oriData.view(-1, 1), newData.view(-1, 1)), dim=0) mergeData = None tmpData = torch.randn(3) for i in range(1, 10): mergeData = AddDataToTorch(mergeData, tmpData, 1) 这个代码的mergeData.shape为什么是27行1列
在这段代码中,首先定义了一个函数 `AddDataToTorch`,用于将新数据 `newData` 添加到原始数据 `oriData` 中。如果原始数据为空,则直接返回新数据;如果两个数据都是二维及以上的矩阵,则在指定的维度上进行拼接;如果两个数据都是一维的向量,则在第0维上进行拼接。
接着使用了一个循环,将 `tmpData` 重复添加到 `mergeData` 中。由于 `mergeData` 的维度是 `(None, 1)`,而 `tmpData` 的维度是 `(3,)`,因此在第1维上进行拼接,即将 `tmpData` 沿着第1维复制三次,然后将三份数据沿着第1维拼接起来,最终得到一个 27 行 1 列的矩阵。
阅读全文