简体   繁体   English

Python Numpy 在向量中堆栈二维数组

[英]Python Numpy stack 2d arrays in vector

So, I would like to stack couple 2d arrays to vector so it would look like this:所以,我想将几​​个二维数组堆叠到向量,所以它看起来像这样:

[[[0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]]

 [[0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]]

 [[0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]]]

I can make smth like this:我可以这样:

import numpy as np
a = np.zeros((5, 5), dtype=int)
b = np.zeros((5, 5), dtype=int)
c = np.stack((a, b), 0)
print(c)

To get this:要得到这个:

[[[0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]]

 [[0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]
  [0 0 0 0 0]]]

But I cant figure out how to add third 2d array to such vector or how to create such vector of 2d arrays iteratively in a loop.但是我不知道如何将第三个二维数组添加到这样的向量中,或者如何在循环中迭代地创建这样的二维数组向量。 Append, stack, concat just dont keep the needed shape追加、堆叠、连接只是不保持所需的形状

So, any suggestions?那么,有什么建议吗? Thank you!谢谢!

Conclusion: Thanks to Tom and Mozway we've got two answers结论:感谢 Tom 和 Mozway,我们得到了两个答案

Tom's:汤姆的:

data_x_train = x_train[np.where((y_train==0) | (y_train==1))

Mozway's:莫兹威:

out = np.empty((0,5,5))

while condition:
    # get new array
    a = XXX
    out = np.r_[out, a[None]]
out

Do you mean something like:你的意思是这样的:

np.tile(a, (3, 1, 1))

array([[[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]],

       [[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]],

       [[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]]])

Edit: Do you mean something like:编辑:你的意思是这样的:

test = np.tile(a, (3000, 1, 1))
filtered_subset = test[[1, 10, 100], :, :]

array([[[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]],

       [[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]],

       [[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]]])

Assuming the following arrays:假设以下数组:

a = np.ones((5, 5), dtype=int)
b = np.ones((5, 5), dtype=int)*2
c = np.ones((5, 5), dtype=int)*3

You can stack all at once using:您可以使用以下命令一次堆叠所有内容:

np.stack((a, b, c), 0)

If you really need to add the arrays iteratively, you can use np.r_ :如果你真的需要迭代地添加数组,你可以使用np.r_

out = a[None]

for i in (b,c):
    out = np.r_[out, i[None]]

output:输出:

array([[[1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1]],

       [[2, 2, 2, 2, 2],
        [2, 2, 2, 2, 2],
        [2, 2, 2, 2, 2],
        [2, 2, 2, 2, 2],
        [2, 2, 2, 2, 2]],

       [[3, 3, 3, 3, 3],
        [3, 3, 3, 3, 3],
        [3, 3, 3, 3, 3],
        [3, 3, 3, 3, 3],
        [3, 3, 3, 3, 3]]])

edit: if you do not know the arrays in advance编辑:如果您事先不知道数组

out = np.empty((0,5,5))

while condition:
    # get new array
    a = XXX
    out = np.r_[out, a[None]]
out

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM