相关疑难解决方法(0)

如何创建动态数组

据我所知,listPython中的类型是一个动态指针数组,当项目被附加到它时会增加它的容量.NumPy中的数组使用连续的内存区域来保存数组的所有数据.

是否有任何类型可以动态增加其作为列表的容量,并将值存储为NumPy数组?类似于C#中的List.如果类型具有与NumPy数组相同的接口,那就太棒了.

我可以创建一个包含NumPy数组的类,并在它完整时调整此数组的大小,例如:

class DynamicArray(object):
    def __init__(self):
        self._data = np.zeros(100)
        self._size = 0

    def get_data(self):
        return self._data[:self._size]

    def append(self, value):
        if len(self._data) == self._size:
            self._data = np.resize(self._data, int(len(self._data)*1.25))
        self._data[self._size] = value
        self._size += 1
Run Code Online (Sandbox Code Playgroud)

但DynamicArray不能用作NumPy数组,我认为在np.resize()之前get_data()返回的所有视图都将保留旧数组.

编辑:数组模块中的数组类型是动态数组.以下程序测试列表和数组的增加因子:

from array import array
import time
import numpy as np
import pylab as pl

def test_time(func):
    arrs = [func() for i in xrange(2000)]
    t = []
    for i in xrange(2000):
        start = time.clock()
        for a in arrs:
            a.append(i)
        t.append(time.clock()-start)
    return np.array(t)

t_list …
Run Code Online (Sandbox Code Playgroud)

python numpy list

16
推荐指数
1
解决办法
3万
查看次数

附加到numpy数组的最佳方法

我有一个numpy数组,我可以使用append简单地追加一个项目,如下所示:

numpy.append(myarray, 1)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我只是附加了整数1.

但这是附加到阵列的最快方法吗?我有一个非常长的阵列,成千上万.

或者更好的索引数组并直接分配它?像这样:

myarray[123] = 1
Run Code Online (Sandbox Code Playgroud)

python arrays optimization numpy

6
推荐指数
1
解决办法
5609
查看次数

附加numpy数组的有效方法

我会保持简单.我有一个循环,将新行附加到numpy数组...这是有效的方法.

n=np.zeros([1,2])
for x in [[2,3],[4,5],[7,6]]
      n=np.append(n,x,axis=1)
Run Code Online (Sandbox Code Playgroud)

现在问题是[0,0]坚持它所以我必须删除它

   del n[0]
Run Code Online (Sandbox Code Playgroud)

这似乎是愚蠢的...所以请告诉我一个有效的方法来做到这一点.

   n=np.empty([1,2])
Run Code Online (Sandbox Code Playgroud)

更糟糕的是它创造了一个未初始化的价值.

python arrays numpy

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

通过附加数据构建 Numpy 数组(事先不知道完整大小)

我有很多文件,每个文件都被读取为 shape 的矩阵(n, 1000),其中 n 可能因文件而异。

我想将它们全部连接成一个大的 Numpy 数组。我目前这样做:

dataset = np.zeros((100, 1000))
for f in glob.glob('*.png'):
    x = read_as_numpyarray(f)    # custom function; x is a matrix of shape (n, 1000)
    dataset = np.vstack((dataset, x))
Run Code Online (Sandbox Code Playgroud)

但它效率低下,因为我dataset通过将现有数组与读取的下一个文件堆叠起来多次重新定义。

如何使用 Numpy 以更好的方式做到这一点,避免整个数据集在内存中多次重写?

注意:最终的大 Numpy 数组可能需要 10 GB。

python memory memory-management numpy numpy-ndarray

3
推荐指数
1
解决办法
1519
查看次数