我有一个空的 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:)
你不应该重复使用任何连接数组的方法。每次串联都会创建一个全新的数组,这是对时间和空间的巨大浪费。
最佳实践应该是创建一个数组列表,然后使用单个堆栈构建目标数组:
>>> 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')