creating a tensor from a list of numpy.ndarray is extremely slow Please consider converting the lis

本文介绍了如何处理嵌套list的数据结构,通过将node_2_negative转换为numpy.ndarray以提高转为torch.LongTensor的效率。作者分享了代码示例和原因,帮助读者理解在处理大量数据时进行这种转换的重要性。

我的代码如下

node_2_neg_list = [torch.LongTensor(node) for node in node_2_negative]

其中node_2_negative是一个list,里面有16个元素:
在这里插入图片描述
每个元素又是一个list,里面与10个元素:
在这里插入图片描述
而每个元素中又包含10个元素:
在这里插入图片描述
所以这是一个list嵌套list的情况,而我们执行上面的代码,提示信息:

creating a tensor from a list of numpy.ndarray is extremely slow  Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor.

因此根据其实信息,我们需要将list先转成numpy.ndarray然后再转成tensor,原先的node_2_negative[0]数据如下:
在这里插入图片描述

然后转成ndarray类型:
在这里插入图片描述
这样就可以放心的把数据转为tensor了:

node_2_neg_list = [torch.LongTensor(np.array(node)) for node in node_2_negative]
为解决从 `numpy.ndarray` 列表创建张量速度慢的问题,可将列表转换为单个 `numpy.ndarray` 再转换为张量。以下是具体步骤和示例代码: 首先,把 `numpy.ndarray` 列表合并成单个 `numpy.ndarray`,使用 `numpy` 的 `stack` 或 `concatenate` 函数。若列表中所有 `ndarray` 形状相同,可使用 `stack` 函数;若形状不同,可使用 `concatenate` 函数。 接着,根据使用的深度学习框架(如 PyTorchTensorFlow)将单个 `numpy.ndarray` 转换为张量。 #### 示例代码(以 PyTorch 为例) ```python import numpy as np import torch # 创建一个 numpy.ndarray 列表 ndarray_list = [np.random.rand(3, 3) for _ in range(10)] # 将列表转换为单个 numpy.ndarray single_ndarray = np.stack(ndarray_list) # 将单个 numpy.ndarray 转换为 PyTorch 张量 tensor = torch.from_numpy(single_ndarray) print("单个 numpy.ndarray 的形状:", single_ndarray.shape) print("张量的形状:", tensor.shape) ``` #### 示例代码(以 TensorFlow 为例) ```python import numpy as np import tensorflow as tf # 创建一个 numpy.ndarray 列表 ndarray_list = [np.random.rand(3, 3) for _ in range(10)] # 将列表转换为单个 numpy.ndarray single_ndarray = np.stack(ndarray_list) # 将单个 numpy.ndarray 转换为 TensorFlow 张量 tensor = tf.convert_to_tensor(single_ndarray) print("单个 numpy.ndarray 的形状:", single_ndarray.shape) print("张量的形状:", tensor.shape) ``` ### 代码解释 - `np.stack(ndarray_list)`:将 `ndarray_list` 中的所有 `ndarray` 沿着新的轴堆叠成一个新的 `ndarray`。 - `torch.from_numpy(single_ndarray)`:将单个 `numpy.ndarray` 转换为 PyTorch 张量。 - `tf.convert_to_tensor(single_ndarray)`:将单个 `numpy.ndarray` 转换为 TensorFlow 张量。 通过这种方式,先将 `numpy.ndarray` 列表合并成单个 `numpy.ndarray`,再转换为张量,可有效提高创建张量的速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值