【问题标题】:Inserting values to an empty multidim. numpy array [duplicate]将值插入到一个空的 multidim。 numpy数组[重复]
【发布时间】:2018-05-20 17:41:09
【问题描述】:

我需要创建一个形状为(?, 10, 10, 3) 的空numpy 数组。 ? 表示我不知道要插入多少个元素。然后我有许多形状为(1, 10, 10, 3) 的numpy 数组,我想将它们一一插入到准备好的数组中,因此? 标记将随着插入的元素而增加。

我正在尝试 numpy 数组方法的所有变体,例如 emptyinsertconcatenateappend... 但我无法实现这一点。你能帮我解决这个问题吗?

【问题讨论】:

  • 不要那样做; NumPy 数组是固定大小的,并且尝试动态扩展它们需要每次都创建一个新数组,这会带来非常昂贵的二次运行时成本。
  • 如果您对沿第一个轴的最大可能长度有一些想法,只需使用out = (M,10,10,3) 预先分配,M 是最大编号和索引,并在每次迭代时分配:@987654331 @ 保持迭代次数。最后,只需将out[:C] 切出C作为最后的迭代次数/计数。
  • 谢谢,我不知道。所以我通过删除插入元素的第一个单维条目来做到这一点,将它附加到一个常规的 python 数组中,这使它成为一个 NumPy 数组。它是这样工作的,不确定是否有效。
  • 如果你真的必须做这样的事情,不要累积到一个数组中,使用my_list.append(array_x)累积到一个普通的list对象,然后,做@ 987654336@
  • @juanpa.arrivillaga 是的,我的意思是一个列表,对不起。我按照你的建议做了。

标签: python arrays numpy


【解决方案1】:

使用np.append 有效:

import numpy as np

mat = np.empty((0,10,10,3))

array = np.random.rand(1,10,10,3)

mat = np.append(mat, array, axis=0)
mat = np.append(mat, array, axis=0)

print(mat.shape)

>>>(2,10,10,3)

【讨论】:

  • 谢谢。但是,正如问题下的 cmets 中提到的那样,这种“极其昂贵的二次运行成本”又如何呢?是真是假?
  • 我相信是的。如果可以的话,你最好附加到一个列表然后形成数组。我只是在回答你的问题!
  • 好的,所以我只使用附加的列表列表,再次感谢。
  • 如果matarray 在尺寸上匹配,我更喜欢使用concatenatenp.append 看起来太像 list.append,在很多方面都让初学者感到困惑。
猜你喜欢
  • 2015-08-24
  • 2015-09-04
  • 2021-07-14
  • 1970-01-01
  • 2013-12-06
  • 2017-07-22
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
相关资源
最近更新 更多