Python数组/矩阵维

Python数组/矩阵维,python,numpy,matrix,Python,Numpy,Matrix,我创建了两个矩阵 import numpy as np arrA = np.zeros((9000,3)) arrB = np.zerros((9000,6)) 我想连接这些矩阵的片段。 但当我尝试这样做时: arrC = np.hstack((arrA, arrB[:,1])) 我得到一个错误: ValueError: all the input arrays must have same number of dimensions 我猜这是因为np.shape(arrB[:,1])等于(

我创建了两个矩阵

import numpy as np
arrA = np.zeros((9000,3))
arrB = np.zerros((9000,6))
我想连接这些矩阵的片段。 但当我尝试这样做时:

arrC = np.hstack((arrA, arrB[:,1]))
我得到一个错误:

ValueError: all the input arrays must have same number of dimensions
我猜这是因为np.shape(arrB[:,1])等于
(9000,)
而不是
(9000,1)
,但我不知道如何解决它


你能对这个问题发表意见吗?

我想试试这样的方法:

np.vstack((arrA.transpose(), arrB[:,1])).transpose()

我想试试这样的东西:

np.vstack((arrA.transpose(), arrB[:,1])).transpose()

您可以通过传递索引列表而不是索引来保留维度:

>>> arrB[:,1].shape
(9000,)
>>> arrB[:,[1]].shape
(9000, 1)
>>> out = np.hstack([arrA, arrB[:,[1]]])
>>> out.shape
(9000, 4)

您可以通过传递索引列表而不是索引来保留维度:

>>> arrB[:,1].shape
(9000,)
>>> arrB[:,[1]].shape
(9000, 1)
>>> out = np.hstack([arrA, arrB[:,[1]]])
>>> out.shape
(9000, 4)

有几种方法可以从
arrB
a
(9000,1)
阵列中进行选择:

np.hstack((arrA,arrB[:,[1]]))
np.hstack((arrA,arrB[:,1][:,None]))
np.hstack((arrA,arrB[:,1].reshape(9000,1)))
np.hstack((arrA,arrB[:,1].reshape(-1,1)))

一个使用数组或列表索引的概念,另一个添加一个新轴(例如
np.newaxis
),第三个使用
重塑
。这些都是基本的numpy数组操作任务。

有几种方法可以从
arrB
a
(9000,1)
数组中进行选择:

np.hstack((arrA,arrB[:,[1]]))
np.hstack((arrA,arrB[:,1][:,None]))
np.hstack((arrA,arrB[:,1].reshape(9000,1)))
np.hstack((arrA,arrB[:,1].reshape(-1,1)))

一个使用数组或列表索引的概念,另一个添加一个新轴(例如
np.newaxis
),第三个使用
重塑
。这些都是基本的numpy数组操作任务。

这更容易直观地看到

假设:

>>> arrA=np.arange(9000*3).reshape(9000,3)
>>> arrA
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [26991, 26992, 26993],
       [26994, 26995, 26996],
       [26997, 26998, 26999]])
>>> arrB=np.arange(9000*6).reshape(9000,6)
>>> arrB
array([[    0,     1,     2,     3,     4,     5],
       [    6,     7,     8,     9,    10,    11],
       [   12,    13,    14,    15,    16,    17],
       ..., 
       [53982, 53983, 53984, 53985, 53986, 53987],
       [53988, 53989, 53990, 53991, 53992, 53993],
       [53994, 53995, 53996, 53997, 53998, 53999]])
如果对arrB进行切片,则生成的序列看起来更像一行:

>>> arrB[:,1]
array([    1,     7,    13, ..., 53983, 53989, 53995])
您需要的是一个与要添加到arrA的柱形状相同的柱:

>>> arrB[:,[1]]
array([[    1],
       [    7],
       [   13],
       ..., 
       [53983],
       [53989],
       [53995]])
然后,hstack按预期工作:

>>> arrC=np.hstack((arrA, arrB[:,[1]]))
>>> arrC
array([[    0,     1,     2,     1],
       [    3,     4,     5,     7],
       [    6,     7,     8,    13],
       ..., 
       [26991, 26992, 26993, 53983],
       [26994, 26995, 26996, 53989],
       [26997, 26998, 26999, 53995]])
另一种形式是在一个维度中指定-1,并在
中指定所需的行数或列数作为另一个维度


有更多关于阵列成形和堆叠的信息

这更容易直观地看到

假设:

>>> arrA=np.arange(9000*3).reshape(9000,3)
>>> arrA
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [26991, 26992, 26993],
       [26994, 26995, 26996],
       [26997, 26998, 26999]])
>>> arrB=np.arange(9000*6).reshape(9000,6)
>>> arrB
array([[    0,     1,     2,     3,     4,     5],
       [    6,     7,     8,     9,    10,    11],
       [   12,    13,    14,    15,    16,    17],
       ..., 
       [53982, 53983, 53984, 53985, 53986, 53987],
       [53988, 53989, 53990, 53991, 53992, 53993],
       [53994, 53995, 53996, 53997, 53998, 53999]])
如果对arrB进行切片,则生成的序列看起来更像一行:

>>> arrB[:,1]
array([    1,     7,    13, ..., 53983, 53989, 53995])
您需要的是一个与要添加到arrA的柱形状相同的柱:

>>> arrB[:,[1]]
array([[    1],
       [    7],
       [   13],
       ..., 
       [53983],
       [53989],
       [53995]])
然后,hstack按预期工作:

>>> arrC=np.hstack((arrA, arrB[:,[1]]))
>>> arrC
array([[    0,     1,     2,     1],
       [    3,     4,     5,     7],
       [    6,     7,     8,    13],
       ..., 
       [26991, 26992, 26993, 53983],
       [26994, 26995, 26996, 53989],
       [26997, 26998, 26999, 53995]])
另一种形式是在一个维度中指定-1,并在
中指定所需的行数或列数作为另一个维度


还有更多关于阵列成形和堆叠的内容

我在这里没有看到您的问题。您有一个9000x3和9000x6阵列,它们的大小不同,因此您无法将它们合并在一起。。。我遗漏了什么吗?我想取9000x3阵列,并将其与9000x1阵列连接,得到9000x4阵列。我希望这个评论能完全描述我的问题。是的,矩阵的维度/大小格式是错误的,它们需要相等。试试np.hstack((arrA,np.zeros((arrayB[1],3))@Emyen它不起作用。我在这里看不到你的问题。您有一个9000x3和9000x6阵列,它们的大小不同,因此您无法将它们合并在一起。。。我遗漏了什么吗?我想取9000x3阵列,并将其与9000x1阵列连接,得到9000x4阵列。我希望这个评论能完全描述我的问题。是的,矩阵的维度/大小格式是错误的,它们需要相等。试试np.hstack((arrA,np.zeros((arrayB[1],3))@Emyen它不起作用。它起作用了,而且有点复杂。谢谢你的评论。它很有效,而且有点复杂。谢谢你的评论。谢谢你的解释。谢谢你的解释