如何在numpy数组中插入数据,并保持其形状?

yvt65v4c  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(113)

我有几个固定形状的数据集合,我需要将这些值存储在一个数组中,只创建一个新的维度,这样我就可以保持它的初始形状。
下面是一个小例子:

arr = np.array([0,1,2])
values = np.array([[3,4,5], [6,7,8], [9,10,11]])

n = 3

for i in range(n):
    arr = np.append(arr, values[n])

字符串
我需要的代码输出类似

>> array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])


但我只能找到

>> array([0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])


有没有一个函数可以处理这个问题?

093gszye

093gszye1#

有许多函数都使用np.concatenatenp.append是一个只接受2个参数的命名不佳的函数。它看起来太像列表追加,因此鼓励了像您这样的迭代使用。这样效率不高。你的问题是你没有提供axis
在这种情况下,我更喜欢使用vstack

In [24]: np.vstack((arr,values))
Out[24]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

字符串
它确保第一个参数为2d,即[[0,1,2]],这样concatenate就很高兴了。
concatenate,无尺寸调整:

In [25]: np.concatenate((arr,values), axis=0)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[25], line 1
----> 1 np.concatenate((arr,values), axis=0)

File <__array_function__ internals>:200, in concatenate(*args, **kwargs)

ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 2 dimension(s)


随着调整。这基本上是appendaxis的结合:

In [26]: np.concatenate((arr[None,:],values), axis=0)
Out[26]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

7gcisfzg

7gcisfzg2#

这是一个简单的。将arr重新整形为一个2d数组,并向np.append添加一个轴参数。

import numpy as np
arr = np.array([0,1,2])
values = np.array([[3,4,5], [6,7,8], [9,10,11]])

out = np.append(arr.reshape(1,-1),values,axis=0)
print(out)

字符串
收益率:

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

相关问题