【问题标题】:Numpy : Add a 1d array (row) to an empty 2d array in Numpy PythonNumpy:在 Numpy Python 中将一维数组(行)添加到一个空的二维数组
【发布时间】:2017-12-06 22:01:21
【问题描述】:

我不知道我提前需要的二维数组(a)的行数和列数:

a = np.empty( (0,0), dtype=np.uint8 )
a.ndim
2

我设法将从文件中读取的每一行转换为一维字节数组,称为line

我想将每一行添加/追加到a,所以我尝试了:

np.vstack( (a,line) )

但我得到: ValueError: all the input arrays must have same number of dimensions

如果我调用a=np.append(a,line),维度的数量变成1

你能帮忙吗?

【问题讨论】:

  • 您是否尝试过将所有一维数组收集到一个列表中并在其上调用np.array?
  • @Anis gathering 是什么意思,我该怎么做?
  • 线从何而来?或许可以简化您的解决方案。
  • @cᴏʟᴅsᴘᴇᴇᴅ line 是 uint8 的数组,例如:[201, 81, 237, 230]
  • 你从哪里得到它?它是更大列表的一部分吗?还是你在某个函数中调用它?

标签: python arrays numpy append


【解决方案1】:

np.vstack 让您走在正确的轨道上。唯一的要求是堆叠的数组必须具有相同的列数。看看这个:

array = None # initialise array to None first

for ...: # now inside the loop
    line = ... # read line from somewhere and get something like [201, 81, 237, 230]

    if array is None:
        array = line
    else: 
        array = np.vstack((array, line))

在性能方面,这实际上比在列表末尾创建一个数组更浪费一点。这是 numpy 数组的问题——它们在维度上是不可变的。

【讨论】:

  • @COLDSPEED 你说得对,我尝试了这两种解决方案,Tom Wyllie 提供的解决方案更快更简单。
  • @SebMa 干杯。 :)
  • @COLDSPEED 再见 :-)
【解决方案2】:

无法追加 Numpy 数组。实现您想要实现的目标的最简单方法是使用列表并在其上调用 np.asarray()。

a = []
# Build list from file
a = np.asarray(a)

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多