numpy数组维度不匹配

时间:2014-03-24 19:52:09

标签: python numpy pandas

我正在使用numpy和pandas来尝试将一些异构值连接成一个数组。

np.concatenate((tmp, id, freqs))

以下是确切的值:

tmp = np.array([u'DNMT3A', u'p.M880V', u'chr2', 25457249], dtype=object)
freqs = np.array([0.022831050228310501], dtype=object)
id = "id_23728"

tmp17232freqs的尺寸如下:

[in]  tmp.shape
[out] (4,)
[in]  np.array(17232).shape
[out] ()
[in]  freqs.shape
[out] (1,)

我也尝试将它们全部作为numpy数组投射无济于事。

虽然变量freqs通常会有多个值。

但是,对于np.concatenatenp.append函数,我收到以下错误:

*** ValueError: all the input arrays must have same number of dimensions

这些列具有相同数量的列(0),为什么我不能将它们与上述任何一种numpy方法连接起来?

我想在一个单维数组中获取[(tmp), 17232, (freqs)],这个数组将被附加到pandas数据帧的末尾。

感谢。

更新

看来我可以连接两个现有的数组:

np.concatenate([tmp, freqs],axis=0)
array([u'DNMT3A', u'p.M880V', u'chr2', 25457249, 0.022831050228310501], dtype=object)

但是,整数,即使在连接时也不能用于连接。

np.concatenate([tmp, np.array(17571)],axis=0)
*** ValueError: all the input arrays must have same number of dimensions

什么工作,但嵌套追加和连接

np.concatenate((np.append(tmp, 17571), freqs),)
array([u'DNMT3A', u'p.M880V', u'chr2', 25457249, 17571,
       0.022831050228310501], dtype=object)

虽然这有点混乱。有没有人有更好的解决方案来连接多个异构数组?

1 个答案:

答案 0 :(得分:2)

问题是id以及后来integer np.array(17571)不是array_like对象。请参阅here numpy如何确定对象是否可以自动转换为numpy数组。

解决方案是制作id array_like,即成为listtuple的元素,以便numpy了解id属于1D array_like结构

这一切归结为

concatenate((tmp, (id,), freqs))

concatenate((tmp, [id], freqs))

为了避免在使用numpy处理函数中的输入变量时出现这类问题,可以使用atleast_1d,如@askewchan所指出的那样。请参阅this问题/答案。

基本上,如果您不确定在不同的情况下,您的变量id是单个str还是str列表,那么您最好使用

concatenate((tmp, atleast_1d(id), freqs))

因为如果id已经是字符串的列表/元组,则上述两个选项将失败。

编辑:为什么np.array(17571)不是array_like对象可能并不明显。这是因为np.array(17571).shape==(),因此它不可迭代,因为它没有维度。