Concatenating two NumPy arrays gives "ValueError: all the input arrays must have same number of dimensions"
Concatenating two NumPy arrays gives "ValueError: all the input arrays must have same number of dimensions"
header
输出:
array(['Subject_ID', 'tube_label', 'sample_#', 'Relabel',
'sample_ID','cortisol_value', 'Group'], dtype='<U14')
body
输出:
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
有人可以解决这个问题吗?
我尝试了不同的命令来合并两者(包括堆栈),但出现了同样的错误。尺寸(列)似乎确实相同。
您需要先对齐数组维度。您目前正在尝试组合一维和二维数组。对齐后可以使用numpy.vstack
.
注np.array([A]).shape
returns(1, 7)
,而B.shape
returns(2, 7)
。更有效的替代方法是使用 A[None, :]
.
另请注意,您的数组将变为 dtype object
,因为这将接受任意/混合类型。
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)
查看numpy.vstack和hstack,以及np.append中的axis参数。这里看起来你想要 vstack(即输出数组将有 3 列,每列具有相同的行数)。您还可以查看 numpy.reshape,以更改输入数组的形状,以便您可以连接它们。
您尝试使用 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
的原因是因为其中一个数组是一维的,而另一个是二维的。但是,numpy.concatenate
期望数组在这种情况下具有相同的维度。这就是为什么我们 使用 None
提升了 arr1
的数组维度。但是,您也可以使用 numpy.newaxis
代替 None
header 输出:
array(['Subject_ID', 'tube_label', 'sample_#', 'Relabel',
'sample_ID','cortisol_value', 'Group'], dtype='<U14')
body 输出:
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
有人可以解决这个问题吗? 我尝试了不同的命令来合并两者(包括堆栈),但出现了同样的错误。尺寸(列)似乎确实相同。
您需要先对齐数组维度。您目前正在尝试组合一维和二维数组。对齐后可以使用numpy.vstack
.
注np.array([A]).shape
returns(1, 7)
,而B.shape
returns(2, 7)
。更有效的替代方法是使用 A[None, :]
.
另请注意,您的数组将变为 dtype object
,因为这将接受任意/混合类型。
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)
查看numpy.vstack和hstack,以及np.append中的axis参数。这里看起来你想要 vstack(即输出数组将有 3 列,每列具有相同的行数)。您还可以查看 numpy.reshape,以更改输入数组的形状,以便您可以连接它们。
您尝试使用 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
的原因是因为其中一个数组是一维的,而另一个是二维的。但是,numpy.concatenate
期望数组在这种情况下具有相同的维度。这就是为什么我们 使用 None
提升了 arr1
的数组维度。但是,您也可以使用 numpy.newaxis
代替 None