【问题标题】:create an empty numpy array based and append existing array创建一个基于空的numpy数组并附加现有数组
【发布时间】: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) 形状数组。甚至我也不得不打猎才能做到这一点。

标签: python arrays list numpy


【解决方案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]])

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多