gpt4 book ai didi

python - numpy 数组维度不匹配

转载 作者:行者123 更新时间:2023-11-28 17:42:14 27 4
gpt4 key购买 nike

我正在使用 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)

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

最佳答案

问题是 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==(),因此它不可迭代,因为它没有维度。

关于python - numpy 数组维度不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com