Python Numpy:如何巧妙地填充阵列?

Python Numpy:如何巧妙地填充阵列?,python,arrays,numpy,Python,Arrays,Numpy,我想在numpy中创建一个3D阵列,如下所示: [ 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ] ... 有没有好的写作方法 使用: 结果: array([[0, 1, 0, 1, 0, 1], [0, 1, 0, 1, 0, 1], [0, 1, 0, 1, 0, 1]]) 编辑: 正如@DSM在一篇评论中所建议的,如果您真的想要一个3D数组——我对您的代码示例并不完

我想在numpy中创建一个3D阵列,如下所示:

[ 0 1 0 1 0 1
  0 1 0 1 0 1
  0 1 0 1 0 1
  0 1 0 1 0 1
  0 1 0 1 0 1 ] ...
有没有好的写作方法

使用:

结果:

array([[0, 1, 0, 1, 0, 1],
       [0, 1, 0, 1, 0, 1],
       [0, 1, 0, 1, 0, 1]])

编辑:
正如@DSM在一篇评论中所建议的,如果您真的想要一个3D数组——我对您的代码示例并不完全清楚——您可以使用:

my_3d_tiled_arr = np.tile(a, (3, 3, 3))
结果:

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

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

       [[0, 1, 0, 1, 0, 1],
        [0, 1, 0, 1, 0, 1],
        [0, 1, 0, 1, 0, 1]]])
如果您想要1-D阵列(同样,不清楚您想要的是什么),您可以执行以下操作:

np.mod(np.arange(10),2)
Out[4]: array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])

当然,如果需要的话,可以对其进行重塑。但是,我认为伯尼的答案更好更清楚

@bernie的方法很棒。实现相同功能的更快方法是(虚拟地)移动元素,而不是多次复制一对
[0,1]
。您可以执行以下操作:

import numpy as np
A1 = np.concatenate([np.zeros(108), np.ones(108)]).reshape((2,108))
A2 = A1.transpose()
A3 = A2.reshape((6,6,6))
第一行初始化一组0和1,并将它们打包到
2x108
数组中。第二行勉强组成了一个
108x2
数组。然后,最后一行重新切片数组,使其成为
6x6x6
,看起来像您要查找的

唯一需要注意的是元素的数量。假设您想要一个最终的3D数组
6x6x6
,就像在我的示例中一样,将所有轴的长度相乘(得到216),然后除以2(=108)。该数字是1和0的数字,以及
重塑((2,n))
函数调用中使用的数字


它如此之快的原因是初始化0或1的向量非常快,比复制任意数组要快。然后,移动元素,如
.transpose()
.restrape()
所做的,几乎不会改变元素的引用方式,而不是在内存中移动元素本身。

这不是2D数组吗?(这完全有可能——甚至有可能——这当然是OP真正想要的。)@DSM,谢谢你的评论。我将添加另一个示例(希望)涵盖所有基础。
import numpy as np
A1 = np.concatenate([np.zeros(108), np.ones(108)]).reshape((2,108))
A2 = A1.transpose()
A3 = A2.reshape((6,6,6))