Python 3.x 使用numpy和cupy时数组类型的差异

Python 3.x 使用numpy和cupy时数组类型的差异,python-3.x,chainer,cupy,Python 3.x,Chainer,Cupy,我正在为我的模型使用chainer库,并面临以下问题: 假设我有一个包含3个特性的测试数据文件,并在最后一列添加了标签。它以列表的形式导入。 e、 g 然后我通过将数据转换成numpy数组并获取labels列来获取标签, 我随后将其转换为一个列表,与预测的标签y_pred=[1,1,1,0]进行比较。i、 e import numpy as np y_true_np = list(np.array(test_set)[:,3]) print(y_true_np) [1, 1, 0, 0] 我关

我正在为我的模型使用chainer库,并面临以下问题: 假设我有一个包含3个特性的测试数据文件,并在最后一列添加了标签。它以列表的形式导入。 e、 g

然后我通过将数据转换成numpy数组并获取labels列来获取标签, 我随后将其转换为一个列表,与预测的标签y_pred=[1,1,1,0]进行比较。i、 e

import numpy as np
y_true_np = list(np.array(test_set)[:,3])
print(y_true_np)
[1, 1, 0, 0]
我关心的是,当我在GPU中运行我的模型时,它使用Cuda.cupy而不是numpy,因为我使用的是chainer library,当我获取真正的标签时,我收到的标签是:

丘比特那边:

import cupy as cp
y_true_cp = list(cp.array(test_set)[:,3]) Or
y_true_cp = list(cuda.cp.array(test_set)[:,3])
两者都返回数组的列表:

y_true_cp: [array(1), array(1), array(0), array(0)]

作为一种解决方法,我在那个特定的地方使用numpy。使用cupy时我是否做错了什么,因此我无法正确获取值?

正如您所写的,按列表换行时的行为似乎有所不同

import numpy as np
import cupy as cp

print(list(np.arange(3))  # --> [0, 1, 2]
print(list(cp.arange(3))  # --> [array(0), array(1), array(2)]
然而,在您的情况下,我认为您可以只使用numpy数组或cupy数组而不转换列表


虽然NumPy将0维数组转换为标量,但CuPy没有。

在结果[array1,array1,array0,array0]中,阵列的每个数据都在GPU上。如果需要高效的CPU阵列,我会使用cupy.asnumpy


y_true_cp=listcp.asnumpycp.arraytest_set[:,3]

没有必要通过numpy

输入

输出

x_true:
[[1 0 9]
 [7 0 8]
 [7 0 2]
 [8 0 1]]
y_true:
[1 1 0 0]
y_true = test_set[:, 3]  # it should work for both numpy & cupy
y_true_np = cuda.to_cpu(y_true)  # If you want to convert the array to numpy
import cupy as cp

test_set = [[1,0,9,1],[7,0,8,1],[7,0,2,0],[8,0,1,0]]
test_set = cp.array(test_set)

x_true = test_set[:, :3]
y_true = test_set[:, 3]
print("x_true:\n".format(x_true))
print("y_true:\n".format(y_true))
x_true:
[[1 0 9]
 [7 0 8]
 [7 0 2]
 [8 0 1]]
y_true:
[1 1 0 0]