Numpy:排列输入和输出向量的正确方法

2024-03-29 07:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个包含两列和多行的numpy数组。第一列表示大小为3的输入向量。第二列表示大小为2的输出向量。你知道吗

arr = np.array([
    [np.array([1,2,3]), np.array([1,0])]
    [np.array([4,5,6]), np.array([0,1])]
])

我期待着:arr[:, 0].shape 返回(2,3),但它返回(2,)

使用numpy将输入和输出向量排列到矩阵中的正确方法是什么?你知道吗


Tags: 方法numpynp矩阵数组array向量arr
2条回答

所以,密码

arr = np.array([
[np.array([1,2,3]), np.array([1,0])],
[np.array([4,5,6]), np.array([0,1])]
])

创建一个对象数组,索引第一列将返回两行,每行中有一个对象,这说明了大小。要得到你想要的东西,你需要把它包起来

np.vstack(arr[:, 0])

从第一列中的对象创建一个数组。这不是很方便,它会使我更有意义地存储在字典里,像这样的东西

io = {'in': np.array([[1,2,3],[4,5,6]]),
'out':np.array([[1,0], [0,1]])
}

结构化数组可以同时提供这两种功能。创造有点棘手,举个例子

arr = np.array([
    (1,2,3), (1,0)),
    ((4,5,6), (0,1)) ],
    dtype=[('in', '3int64'), ('out', '2float64')])

创建一个具有inout字段的结构化数组,分别由3个整数和2个浮点组成。可以像往常一样访问行

In[73]: arr[0]
Out[74]: ([1, 2, 3], [ 1.,  0.])

或者按字段名

In [73]: arr['in']
Out[73]: 
array([[1, 2, 3],
   [4, 5, 6]])

numpy手册有更多的细节(https://docs.scipy.org/doc/numpy-1.13.0/user/basics.rec.html)。我不能添加任何细节,因为我已经打算在一个项目中使用它们一段时间了,但没有

如果确定每列中的元素具有相同的大小/长度,则可以选择并使用numpy.row_stack堆叠结果:

np.row_stack(arr[:,0]).shape
# (2, 3)

np.row_stack(arr[:,1]).shape
# (2, 2)

相关问题 更多 >