numpy 沿轴连接不适用于生成的数组

numpy concatenation along axis is not working with generated arrays

当我们沿轴连接一维数组和二维数组时,我们可以产生这样的连接数组。

a = np.c_[np.array([10,12]),[np.array([1,2,3]),np.array([2,3,4])]]

array([[10,  1,  2,  3],
       [12,  2,  3,  4]])

我正在尝试对具有给定 1d array.Somehow 连接的生成的 2d nan 数组做同样的事情 working.I 认为生成 nan 时的问题 arrays.What 是这个的原因?

tmp = np.array([280, 362, 236, 239, 336, 347, 238, 327, 369, 238, 324, 264, 280,
       284, 347, 265, 303, 276, 261, 274, 353, 260, 280, 240, 312, 239,
       314, 319, 238, 324, 322, 238, 226, 294, 280, 276, 306, 265, 203,
       292, 261, 265, 284, 260, 184, 294, 312, 226, 284, 319, 238, 281,
       322, 180, 284, 294, 253, 282, 306, 194, 282, 292, 246, 279, 284,
       205])

tmp2 = np.array([7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7,
       7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7,
       6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6])

nans = [ np.ones(i)*np.nan for i in tmp2]
concat = np.c_[tmp,nans]

输出

array([[280, array([nan, nan, nan, nan, nan, nan, nan])],
       [362, array([nan, nan, nan, nan, nan, nan, nan])],
       [236, array([nan, nan, nan, nan, nan, nan])],
       [239, array([nan, nan, nan, nan, nan, nan, nan])],
       [336, array([nan, nan, nan, nan, nan, nan, nan])],
       [347, array([nan, nan, nan, nan, nan, nan])],
       ....

预期输出

array([[280,nan, nan, nan, nan, nan, nan, nan],
       [362,nan, nan, nan, nan, nan, nan, nan],
       [236,nan, nan, nan, nan, nan, nan],
       [239,nan, nan, nan, nan, nan, nan, nan]
           ....
        ])

我会用这样的东西,如果性能不是那么重要,它会工作得很好。

output = []
for i, k in zip(tmp, tmp2):
       nans = np.ones(k) * np.nan
       output.append(np.concatenate([np.array([i]),nans]))

print(output)

你的代码失败的原因是 Numpy 不支持“锯齿状” 数组(每行中有不同数量的元素)。

您可以根据需要添加任意数量的 NaN 列(每行中的数字相同), 执行:

n = 5  # How many NaN columns to add
tmp = np.array([280, 362, 236, 239])
result = np.c_[tmp, np.full((tmp.size, n), np.nan)]

结果是:

array([[280.,  nan,  nan,  nan,  nan,  nan],
       [362.,  nan,  nan,  nan,  nan,  nan],
       [236.,  nan,  nan,  nan,  nan,  nan],
       [239.,  nan,  nan,  nan,  nan,  nan]])