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

l5tcr1uw  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(182)

我有一个空的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:)

doinxwow

doinxwow1#

不应该使用任何重复连接数组的方法。每一次连接都将创建一个全新的阵列,这是对时间和空间的巨大浪费。
最佳实践应该是创建一个数组列表,然后使用单个堆栈构建目标数组:

>>> 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')

相关问题