我正在使用numpy和list构造函数创建一些数组,我无法弄清楚为什么这会失败。我的代码是:
import numpy as np
A = np.ndarray( [i for i in range(10)] ) # works fine
B = np.ndarray( [i**2 for i in range(10)] ) # fails, with MemoryError
我也尝试了B = [i**2 for i in range(10)]
,但是我需要它成为一个ndarray。我不明白为什么普通的构造函数会工作,但调用函数不会。据我所知,ndarray构造函数甚至不应该看到它的内部,它应该得到一个长度为10的列表,其中包含int。
答案 0 :(得分:2)
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html是一种我们通常不使用的低级方法。它的第一个参数是shape
。
In [98]: np.ndarray([x for x in range(3)])
Out[98]: array([], shape=(0, 1, 2), dtype=float64)
In [99]: np.ndarray([x**2 for x in range(3)])
Out[99]: array([], shape=(0, 1, 4), dtype=float64)
通常使用zeros
或ones
来构建给定形状的空白数组:
In [100]: np.zeros([x**2 for x in range(3)])
Out[100]: array([], shape=(0, 1, 4), dtype=float64)
如果要将列表转换为数组,请使用np.array
:
In [101]: np.array([x for x in range(3)])
Out[101]: array([0, 1, 2])
In [102]: np.array([x**2 for x in range(3)])
Out[102]: array([0, 1, 4])
您可以生成范围编号,然后对整个数组执行数学运算(无需迭代):
In [103]: np.arange(3)**2
Out[103]: array([0, 1, 4])