当前位置: 首页 > 知识库问答 >
问题:

连接两个NumPy数组将给出“ValueError:所有输入数组必须具有相同的维数”

郎俊雅
2023-03-14

标题输出:

array(['Subject_ID', 'tube_label', 'sample_#', 'Relabel', 
      'sample_ID','cortisol_value', 'Group'], dtype='<U14')

车身输出:

array([['STM002', '170714_STM002_1', 1, 1, 1, 1.98, 'HC'],
       ['STM002', '170714_STM002_2', 2, 2, 2, 2.44, 'HC'],], dtype=object)

testing = np.concatenate((header, body), axis=0)
ValueError                                Traceback (most recent call last) <ipython-input-302-efb002602b4b> in <module>()
      1 # Merge names and the rest of the data in np array
      2 
----> 3 testing = np.concatenate((header, body), axis=0)

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

有人能解决这个问题吗?我尝试了不同的命令来合并这两个(包括堆栈),我得到了同样的错误。虽然尺寸(列)看起来是一样的。

共有3个答案

苗阳文
2023-03-14

看看努比。vstack和hstack,以及np中的轴参数。追加这里看起来您需要vstack(即,输出数组将有3列,每列的行数相同)。你也可以看看numpy。重塑,以更改输入数组的形状,以便可以连接它们。

司马高韵
2023-03-14

首先需要对齐数组尺寸。您正在尝试组合1维和2维数组。对齐后,可以使用numpy.vstack

注意np.array([A]). form返回(1,7),而B. form返回(2,7)。更有效的替代方法是使用A[无,:]

另外请注意,数组将变成dtypeobject,因为这将接受任意/混合类型。

A = np.array(['Subject_ID', 'tube_label', 'sample_#', 'Relabel', 
              'sample_ID','cortisol_value', 'Group'], dtype='<U14')

B = np.array([['STM002', '170714_STM002_1', 1, 1, 1, 1.98, 'HC'],
              ['STM002', '170714_STM002_2', 2, 2, 2, 2.44, 'HC'],], dtype=object)

res = np.vstack((np.array([A]), B))

print(res)

array([['Subject_ID', 'tube_label', 'sample_#', 'Relabel', 'sample_ID',
        'cortisol_value', 'Group'],
       ['STM002', '170714_STM002_1', 1, 1, 1, 1.98, 'HC'],
       ['STM002', '170714_STM002_2', 2, 2, 2, 2.44, 'HC']], dtype=object)
苗烈
2023-03-14

您尝试使用numpy.concatenate()是正确的,但是您必须在连接之前将第一个数组提升到2D。这里有一个简单的例子:

In [1]: import numpy as np

In [2]: arr1 = np.array(['Subject_ID', 'tube_label', 'sample_#', 'Relabel', 
   ...:       'sample_ID','cortisol_value', 'Group'], dtype='<U14')
   ...:       

In [3]: arr2 = np.array([['STM002', '170714_STM002_1', 1, 1, 1, 1.98, 'HC'],
   ...:        ['STM002', '170714_STM002_2', 2, 2, 2, 2.44, 'HC'],], dtype=object)
   ...:        

In [4]: arr1.shape
Out[4]: (7,)

In [5]: arr2.shape
Out[5]: (2, 7)

In [8]: concatenated = np.concatenate((arr1[None, :], arr2), axis=0)

In [9]: concatenated.shape
Out[9]: (3, 7)

结果连接的数组如下所示:

In [10]: concatenated
Out[10]: 
array([['Subject_ID', 'tube_label', 'sample_#', 'Relabel', 'sample_ID',
        'cortisol_value', 'Group'],
       ['STM002', '170714_STM002_1', 1, 1, 1, 1.98, 'HC'],
       ['STM002', '170714_STM002_2', 2, 2, 2, 2.44, 'HC']], dtype=object)

获取ValueError的原因是其中一个数组是1D,而另一个是2D。但是,numpy。在这种情况下,concatenate希望数组具有相同的维度。这就是为什么我们使用None提升了arr1的数组维度。但是,您也可以使用numpy。newaxis代替None

 类似资料:
  • 问题内容: 如何串联这些数组? 首先具有形状 第二个形状 最终结果应该是 我试过了 但是我得到这个错误 我究竟做错了什么? 问题答案: 要使用,我们需要将第二个数组扩展到,然后沿着- 或者,我们可以使用它来照顾它- 样品运行- 如果是这样,它的一个阵列具有的形状,很可能所有的数据都包含在它的唯一元素,我们需要 压扁 在连接前出来。为此,我们也可以使用它。这里是一个示例,目的是为了清楚地说明这一点-

  • 问题内容: 我有一个问题。 我正在尝试通过使用以下代码来复制20x361矩阵的最后一列: 但是我得到了错误: ValueError:所有输入数组的维数必须相同 但是,我已经通过检查矩阵尺寸 我得到 (20公升)(20公升,361公升) 所以尺寸匹配?错误在哪里? 问题答案: 如果我从3x4数组开始,然后将3x1数组与轴1连接起来,则会得到3x5数组: 请注意,两个要连接的输入都具有2维。 省略形状

  • 本文向大家介绍写出一个函数,输入是两个数组,输出是将两个数组中所有元素排序以后用一个数组输出。相关面试题,主要包含被问及写出一个函数,输入是两个数组,输出是将两个数组中所有元素排序以后用一个数组输出。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: //快速排序 //两路归并 cerr << "内存分配失败" << endl;  

  • 问题内容: 我试图在尝试对6参数函数进行任何复杂操作之前,遍历6参数函数的参数空间,以研究其数值行为,因此,我正在寻找一种有效的方法来执行此操作。 我的函数将6-dim numpy数组中给出的浮点值作为输入。我最初尝试做的是: 首先,我创建了一个函数,该函数接受2个数组并生成一个包含两个数组中值的所有组合的数组: 然后,我曾经将其应用于同一数组的m个副本: 最后,我这样评估我的功能: 这工作,但它

  • 我有一个具有相同键值uid的多维数组。我想把它转换成子数组通过限制Foreachloop.you可以看到两个uid有值100和两个uid有值5465 我想得到这样的阵列。 我可以不使用foreach循环得到结果吗?

  • 问题内容: 哦,我的话我是个傻瓜。 调用函数时,我只是省略了第二个和第三个参数。像个傻瓜。因为那就是我。原来愚蠢的问题如下: 这似乎是它必须做一个很平常的事,但是我无法找到相关的教程,我太无知了约,并弄明白自己。 我的文件中有一个C函数。 (您可能会猜到,我最初的参数为double 而不是void ,但无法弄清楚在Python方面该怎么做。我当然很想将其改回来,但我并不挑剔只要有效。) 我用它制作