关于.shape的numpy数组问题

时间:2019-04-11 12:02:19

标签: arrays python-3.x numpy

我是numpy的新手,在数组形状方面遇到了一些麻烦。

我想在Matlab中像矩阵一样操作数组。但是,我对以下事情感到困惑:

>>> b = np.array([[1,2],[3,4]])
array([[1, 2],
       [3, 4]])

>>> c = b[:,1] # I want c is a column vector
>>> c.shape
(2,)

>>> d = b[1,:] # I want d is a row vector
>>> d.shape
>>> (2,)

我想将cd分别视为列向量和行向量。

我不明白为什么cd具有相同的形状(2,)

因此在以后的计算中给我带来麻烦。

谁能帮我解决这个问题。非常感谢!

3 个答案:

答案 0 :(得分:0)

通常,如果您希望数组c是形状为(2,1)的列向量,则可以通过以下方式对其进行整形:

c = c.reshape(-1,1) # c.shape --> (2, 1)

类似地,如果您希望数组d是形状为(1,2)的行向量,则可以通过以下方式对其进行整形:

d = d.reshape(1,-1) # d.shape --> (1, 2)

答案 1 :(得分:0)

您可以使用

c = b[:,[1]]
d = b[[1],:]

将向量作为显式行/列向量:

c.shape # (1, 2)
d.shape # (2, 1)

答案 2 :(得分:0)

使用纯整数作为索引将返回该列/行作为真实向量。这类似于为列表建立索引-您只会在该索引处收到元素。包含尺寸被剥去:

>>> my_list = ['a', 'b', 'c', 'd']
>>> my_list[2]
'c'

相反,您需要切片。列表的切片是(子)列表,矩阵的切片是矩阵。使用numpy时,可以使用:或切片索引将其指定为切片符号:

>>> c = b[:,:1]  # slice notation
>>> c.shape
(2, 1)
>>> d = b[[1],:] # sequence of indices
>>> d.shape
(1, 2)

切片符号用于连续的索引范围。例如,:1的意思是“从开始到1的所有内容”。序列符号适用于非连续索引集。例如,[0, 2]会跳过索引1。如果只需要一个索引,则除非要处理边框(第一行/最后一行/列),否则序列符号会更简单。