Python Numpy:如何在列中堆叠数组?

Python Numpy:如何在列中堆叠数组?,python,numpy,Python,Numpy,假设有n个相同长度的numpy数组。现在我想创建一个numpy矩阵,这样矩阵的每一列都是一个numpy数组。我怎样才能做到这一点?现在我在循环中这样做,它会产生错误的结果 注意:我必须能够一个接一个地迭代地堆叠它们 我的代码看起来像是假设get_array是一个基于其参数返回特定数组的函数。我不知道直到循环结束后,我会有多少列 matrix = np.empty((n_rows,)) for item in sorted_arrays: array = get_array(item)

假设有n个相同长度的numpy数组。现在我想创建一个numpy矩阵,这样矩阵的每一列都是一个numpy数组。我怎样才能做到这一点?现在我在循环中这样做,它会产生错误的结果

注意:我必须能够一个接一个地迭代地堆叠它们

我的代码看起来像是假设get_array是一个基于其参数返回特定数组的函数。我不知道直到循环结束后,我会有多少列

matrix = np.empty((n_rows,))
for item in sorted_arrays:
    array = get_array(item)
    matrix = np.vstack((matrix,array))

任何帮助都将不胜感激

您可以尝试将所有数组(或列表)放入一个矩阵中,然后进行转置。如果所有数组的长度都相同,这将起作用

mymatrix = np.asmatrix((array1, array2, array3)) #... putting arrays into matrix.
mymatrix = mymatrix.transpose()

这将输出一个矩阵,每个数组作为一列。希望这有帮助。

您可以尝试将所有数组(或列表)放入一个矩阵中,然后进行转置。如果所有数组的长度都相同,这将起作用

mymatrix = np.asmatrix((array1, array2, array3)) #... putting arrays into matrix.
mymatrix = mymatrix.transpose()

这将输出一个矩阵,每个数组作为一列。希望这对您有所帮助。

如果您有一个长度相同的a、b、c、d np数组,下面的代码将完成您想要的:

out_matrix = np.vstack([a, b, c, d]).transpose()
例如:

In [3]: a = np.array([1, 2, 3, 4])

In [4]: b = np.array([5, 6, 7, 8])

In [5]: c = np.array([2, 3, 4, 5])

In [6]: d = np.array([6, 8, 2, 4])

In [10]: np.vstack([a, b, c, d]).transpose()
Out[10]: 
        array([[1, 5, 2, 6],
               [2, 6, 3, 8],
               [3, 7, 4, 2],
               [4, 8, 5, 4]])

如果您有一个长度相同的a、b、c、d np数组,下面的代码将实现您想要的功能:

out_matrix = np.vstack([a, b, c, d]).transpose()
例如:

In [3]: a = np.array([1, 2, 3, 4])

In [4]: b = np.array([5, 6, 7, 8])

In [5]: c = np.array([2, 3, 4, 5])

In [6]: d = np.array([6, 8, 2, 4])

In [10]: np.vstack([a, b, c, d]).transpose()
Out[10]: 
        array([[1, 5, 2, 6],
               [2, 6, 3, 8],
               [3, 7, 4, 2],
               [4, 8, 5, 4]])

我们一再建议收集列表中的数组,并通过一次调用生成最终数组。这样做效率更高,而且通常更容易做到正确

alist = []
for item in sorted_arrays:
    alist.append(get_array(item)

有多种方法可以组合列表。由于您需要列,并且假设
get_array
生成大小相等的1d数组:

arr = np.column_stack(alist)
将它们按行收集并进行换位,这同样有效:

arr = np.array(alist).T
arr = np.vstack(alist).T
arr = np.stack(alist).T
arr = np.stack(alist, axis=1)
如果阵列已经是二维的

arr = np.concatenate(alist, axis=1)
所有的
堆栈
变体都使用
串联
,只是它们调整输入数组形状的方式不同。使用
连接的关键是理解尺寸和形状,以及如何根据需要添加尺寸。这应该很快或稍后在这种编码中变得流利

如果它们的形状或尺寸不同,事情就会变得更混乱

同样好的做法是将数组放入预先分配的数组中。但是你需要知道想要的最终形状

arr = np.zeros((m,n), dtype)
for i, item in enumerate(sorted_arrays):
    arr[:,i] = get_array(item)

n
len(已排序的数组)
,而
m
get\u数组(项)
之一的长度。您还需要知道预期的
dtype
(int、float等)。

我们一再建议在列表中收集数组,并通过一次调用生成最终数组。这样做效率更高,而且通常更容易做到正确

alist = []
for item in sorted_arrays:
    alist.append(get_array(item)

有多种方法可以组合列表。由于您需要列,并且假设
get_array
生成大小相等的1d数组:

arr = np.column_stack(alist)
将它们按行收集并进行换位,这同样有效:

arr = np.array(alist).T
arr = np.vstack(alist).T
arr = np.stack(alist).T
arr = np.stack(alist, axis=1)
如果阵列已经是二维的

arr = np.concatenate(alist, axis=1)
所有的
堆栈
变体都使用
串联
,只是它们调整输入数组形状的方式不同。使用
连接的关键是理解尺寸和形状,以及如何根据需要添加尺寸。这应该很快或稍后在这种编码中变得流利

如果它们的形状或尺寸不同,事情就会变得更混乱

同样好的做法是将数组放入预先分配的数组中。但是你需要知道想要的最终形状

arr = np.zeros((m,n), dtype)
for i, item in enumerate(sorted_arrays):
    arr[:,i] = get_array(item)

n
len(已排序的数组)
,而
m
get\u数组(项)
之一的长度。您还需要知道预期的
dtype
(int、float等)。

是否尝试了矩阵。追加(项)?但我希望它们出现在列中您尝试矩阵的ID。追加(项)?但我希望它们出现在列中