Python 一次创建多个数据阵列
我想用numpy.zerosN,M创建多个矩阵。但我刚刚意识到这并不像我想象的那样有效: 为了简单起见,有人能给我解释一下以下代码1dim数组的结果吗:Python 一次创建多个数据阵列,python,numpy,Python,Numpy,我想用numpy.zerosN,M创建多个矩阵。但我刚刚意识到这并不像我想象的那样有效: 为了简单起见,有人能给我解释一下以下代码1dim数组的结果吗: #!/usr/bin/python import numpy as np #sequential array creation X=np.zeros(1) Y=np.zeros(1) X[0],Y[0]=1.0,2.0 print X,Y #multiple array creation X,Y=[np.zeros(1)]*2 X[0],
#!/usr/bin/python
import numpy as np
#sequential array creation
X=np.zeros(1)
Y=np.zeros(1)
X[0],Y[0]=1.0,2.0
print X,Y
#multiple array creation
X,Y=[np.zeros(1)]*2
X[0],Y[0]=1.0,2.0
print X,Y
结果是
[1.][2]
[2.][2]
这意味着创建数组的第二种方法不起作用
在一条直线上创建多个具有相同尺寸的阵列的最佳方法是什么
mylist * 2
相当于
mylist + mylist #resulting list has 2 references to each element in mylist
#stored as:
#[mylist[0],mylist[1],...,mylist[0],mylist[1],...]
# ^ ----------------------^
# reference the same object
在你的例子中,你制作一个numpy数组,然后把它放在一个列表中。当您将该列表相乘时,得到的列表有两个对同一数组的引用
如果要创建多个数组并将它们放入列表中,那么列表理解就可以了:
lst_of_arrays = [ np.zeros(1) for _ in range(N) ]
或者,如果要解包的数量不够,您可以使用生成器或下面的列表,我选择生成器:
X,Y = ( np.zeros(1) for _ in range(2) )
X,Y,Z = ( np.zeros(1) for _ in range(3) )
W,X,Y,Z = ( np.zeros(1) for _ in range(4) )
...
而且,在python2.x中,为了避免不可避免的注释,您可以使用xrange而不是range来节省创建列表的开销…另一种不使用列表理解或生成器的解决方案是:
X, Y = np.zeros((2,1))
X, Y, Z = np.zeros((3, 5, 5))
因此,如果您需要三个形状为5、5的阵列,则应为:
X, Y = np.zeros((2,1))
X, Y, Z = np.zeros((3, 5, 5))
为了更好地解释原始示例中的错误,我参考了mgilson的答案。在创建列表的代码中节省创建列表的开销有什么意义?@ecatmur,你是在说我关于xrange的旁白吗?如果您在python2.x中使用range,您将创建2个列表range将创建一个额外的列表,该列表将在列表comp/generator中迭代,而不是只创建1个您想要的列表。