Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一次创建多个数据阵列_Python_Numpy - Fatal编程技术网

Python 一次创建多个数据阵列

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],

我想用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],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个您想要的列表。