将循环中的 numpy 数组附加到空的 numpy 数组

问题描述 投票:0回答:1

我有一个空的 numpy 数组。我想将数组附加到它,以便每个附加的数组成为一个元素。

import numpy as np

a = np.array([])

for i in range(3):
    a=np.append(a,np.array(['x','y','z']))

print(a)

我的预期结果是:a= [['x','y','z'],['x','y','z'],['x','y','z'] ] 但是如果不添加 axis=1 并以不同方式处理第一个附加,这似乎是不可能的。这增加了不必要的 if 条件,每次循环。同样是使用 vstack 时的问题。第一次插入数组必须使用 hstack,随后的插入必须使用 vstack。

在 numpy 中实现这一目标的最佳方法是什么?

TIA:)

python arrays numpy append vstack
1个回答
0
投票

你不应该重复使用任何连接数组的方法。每次串联都会创建一个全新的数组,这是对时间和空间的巨大浪费。

最佳实践应该是创建一个数组列表,然后使用单个堆栈构建目标数组:

>>> np.vstack([np.array(['x','y','z']) for _ in range(3)])
array([['x', 'y', 'z'],
       ['x', 'y', 'z'],
       ['x', 'y', 'z']], dtype='<U1')

本例的其他一些构造方法:

>>> np.tile(np.array(['x', 'y', 'z']), (3, 1))
array([['x', 'y', 'z'],
       ['x', 'y', 'z'],
       ['x', 'y', 'z']], dtype='<U1')
>>> np.array(['x','y','z'])[None].repeat(3, 0)
array([['x', 'y', 'z'],
       ['x', 'y', 'z'],
       ['x', 'y', 'z']], dtype='<U1')
© www.soinside.com 2019 - 2024. All rights reserved.