相关疑难解决方法(0)

Pythonic从numpy数组列表中创建numpy数组的方法

我在循环中生成一维numpy数组的列表,然后将此列表转换为2d numpy数组.如果我提前知道项目的数量,我会预先分配一个2d numpy数组,但我没有,因此我将所有内容都放在列表中.

模拟如下:

>>> list_of_arrays = map(lambda x: x*ones(2), range(5))
>>> list_of_arrays
[array([ 0.,  0.]), array([ 1.,  1.]), array([ 2.,  2.]), array([ 3.,  3.]), array([ 4.,  4.])]
>>> arr = array(list_of_arrays)
>>> arr
array([[ 0.,  0.],
       [ 1.,  1.],
       [ 2.,  2.],
       [ 3.,  3.],
       [ 4.,  4.]])
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

是否有更好的方法(性能方面)来完成收集顺序数字数据(在我的情况下是numpy数组)的任务,而不是将它们放在一个列表中然后从中创建一个numpy.array(我正在创建一个新的obj并复制数据)?在经过良好测试的模块中是否有"可扩展"矩阵数据结构?

我的2d矩阵的典型大小将介于100x10和5000x10浮点之间

编辑:在这个例子中我使用map,但在我的实际应用程序中,我有一个for循环

python arrays performance numpy scipy

40
推荐指数
3
解决办法
4万
查看次数

预分配NumPy阵列的首选方法是什么?

我是NumPy/SciPy的新手.从文档中,预分配单个数组而不是调用append/insert/concatenate似乎更有效.

例如,要向数组中添加1的列,我认为这样:

ar0 = np.linspace(10, 20, 16).reshape(4, 4)
ar0[:,-1] = np.ones_like(ar0[:,0])
Run Code Online (Sandbox Code Playgroud)

比这更受欢迎:

ar0 = np.linspace(10, 20, 12).reshape(4, 3)
ar0 = np.insert(ar0, ar0.shape[1], np.ones_like(ar0[:,0]), axis=1)
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是这是否正确(第一个是更好的),我的第二个问题是,目前,我只是预先分配我的数组(我在SciPy网站上的几个Cookbook示例中注意到):

np.zeros((8,5))
Run Code Online (Sandbox Code Playgroud)

什么是'NumPy首选'的方式来做到这一点?

python numpy

21
推荐指数
2
解决办法
2万
查看次数

标签 统计

numpy ×2

python ×2

arrays ×1

performance ×1

scipy ×1