创建一个基于空的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数组并附加现有数组的主要内容,如果未能解决你的问题,请参考以下文章