我认为您必须使用迭代或其他库,例如Pandas 这样做,因为每一列都有不同的大小(在本例中,我们将处理大小不等的 A 和 B) .因此,如果您想通过np.savetxt 执行此操作,则必须将保存的数组指定为 object 类型。如果你使用 object 类型的数组被 np.savetxt 保存,它只会填充 csv 文件的第一行:
A = np.array([2, 4.1, 5], dtype=np.float64)
B = np.array([2, 7, 9, 1], dtype=np.float64)
C = 1
D = 7
Output = np.zeros((1, 4), dtype=object)
Output[0, :] = A, B, C, D
np.savetxt('Output.csv', Output, delimiter=",", fmt='%s')
这将是:
我不认为仅由 NumPy 就可以很好地处理它,最好尝试其他库,例如 Pandas 或……或使用迭代打开 csv 文件并导入它。但是,如果您想使用 NumPy 这样做(只是为了弄清楚如何通过 NumPy 完成这项工作),可以通过填充以间接方式均衡数组的大小来实现。为此,我们必须找到A 和B 的最大长度以将数组填充到该长度。在这个例子中,我用np.nan 填充了填充索引,然后removed it for the output:
max_len = max(A.shape[0], B.shape[0])
A_pad = np.pad(A, (0, max_len - A.shape[0]), constant_values=(np.nan,))
B_pad = np.pad(B, (0, max_len - B.shape[0]), constant_values=(np.nan,))
C_pad = np.pad(np.array([C], dtype=np.float64), (0, max_len - 1), constant_values=(np.nan,))
D_pad = np.pad(np.array([D], dtype=np.float64), (0, max_len - 1), constant_values=(np.nan,))
Output = np.array([A_pad, B_pad, C_pad, D_pad]).T
Output = Output.astype(str)
Output[Output == 'nan'] = ''
np.savetxt('Output.csv', Output, delimiter=",", fmt="%s")