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它不起作用。它起作用了,而且有点复杂。谢谢你的评论。它很有效,而且有点复杂。谢谢你的评论。谢谢你的解释。谢谢你的解释