创建一个基于空的numpy数组并附加现有数组

Posted

技术标签:

【中文标题】创建一个基于空的numpy数组并附加现有数组【英文标题】:create an empty numpy array based and append existing array 【发布时间】:2019-02-16 10:38:27 【问题描述】:

我想初始化空的 numpy (E) 数组,然后将现有数组(D) 中的选定行附加到空数组(E)。我无法初始化与 D 的维度匹配的空数组。我该如何解决这个问题。

E = np.array([ [ ] ])

D = np.array([ [20, 23 ], [19, 23],[19,22] ]) 

for i in np.where(index):  ## assume index value is ([0],[2])

    E = np.append( E , D[i] , axis = 0)

我正在尝试达到以下结果:

E = ([ [20, 23 ], [19,22] ]) 

错误:除连接轴外的所有输入数组维度必须完全匹配

【问题讨论】:

不要模仿列表追加数组。坚持使用E=[]E.append(D[i]),然后再制作数组。 np.append 很慢,你必须了解数组维度才能创建正确的“空”数组。 为了使数组追加工作,E 必须从 (0,2) 形状数组开始,D[i] 必须变成 (1,2) 形状数组。甚至我也不得不打猎才能做到这一点。 【参考方案1】:

不要使用np.append

np.append 创建数据副本。你会发现它效率低下。除非绝对必要,否则应避免。

读入np.array并切片

将您的单项列表元组转换为 NumPy 数组并直接索引:

D = np.array([[20, 23], [19, 23], [19, 22]])
index = ([0], [2])

E = D[np.array(index).ravel()]

结果:

array([[20, 23],
       [19, 22]])

【讨论】:

感谢 jpp。你为我节省了很多时间。【参考方案2】:

为什么要初始化一个空数组?您可以根据您的索引对D 进行切片:

index = [0,2]

E = D[index]

>>> E
array([[20, 23],
       [19, 22]])

【讨论】:

以上是关于创建一个基于空的numpy数组并附加现有数组的主要内容,如果未能解决你的问题,请参考以下文章

附加一个具有不同第一维的numpy数组

附加 Numpy 数组失败

C-Numpy:如何从现有数据创建固定宽度的字符串数组

用于附加和创建pandas数据帧的快速numpy数组结构

NumPy来自现有数据的数组

混合类型的 NumPy 数组/矩阵