Python Numpy-附加三个数组以形成矩阵或3D数组

Python Numpy-附加三个数组以形成矩阵或3D数组,python,arrays,numpy,Python,Arrays,Numpy,这是我的一段简单的代码 一切都是一个小数组。我也欢迎使用列表进行操作 a = [1,2,3,4,5] b = [3,2,2,2,8] c = ['test1', 'test2', 'test3','test4','test5'] 预期成果: d = [ 1, 2, 3, 4, 5; 3, 2, 2, 2, 8; 'test1','test2', 'test3', 'test4','test5' ] 或 查看 Adam使用的numpy.concat也是正确的,但在指

这是我的一段简单的代码

一切都是一个小数组。我也欢迎使用列表进行操作

a = [1,2,3,4,5]
b = [3,2,2,2,8]

c = ['test1', 'test2', 'test3','test4','test5']
预期成果:

d = [ 1, 2, 3, 4, 5; 
      3, 2, 2, 2, 8;
      'test1','test2', 'test3', 'test4','test5' ]

查看

Adam使用的
numpy.concat
也是正确的,但在指定您期望的确切形状(垂直堆叠的行)方面,您需要查看:

>>将numpy作为np导入
>>>np.vstack([a,b,c])
数组(['1','2','3','4','5'],
['3', '2', '2', '2', '8'],
['test1','test2','test3','test4','test5']],

dtype='您的
a
b
c
是列表;您必须使用
np.array([1,2,3])
来获取数组,它将显示为
[1,2,3]
(不带逗号)

只需从这些列表创建一个新列表,就可以生成一个列表列表

In [565]: d=[a,b,c]
In [566]: d
Out[566]: 
[[1, 2, 3, 4, 5],
 [3, 2, 2, 2, 8],
 ['test1', 'test2', 'test3', 'test4', 'test5']]
简单地连接这些列表会产生一个更长的列表

In [567]: a+b+c
Out[567]: [1, 2, 3, 4, 5, 3, 2, 2, 2, 8, 'test1', 'test2', 'test3', 'test4', 'test5']
numpy
数组在同时包含数字和字符串时出现问题。您必须创建一个“结构化数组”

将它们组合到一个数组中的最简单方法是使用
fromarrays
实用程序函数:

In [561]: x=np.rec.fromarrays(([1,2,3],[3,2,2],['test1','test2','test3']))
In [562]: x['f0']
Out[562]: array([1, 2, 3])
In [563]: x['f2']
Out[563]: 
array(['test1', 'test2', 'test3'], 
      dtype='<U5')

In [568]: x
Out[568]: 
rec.array([(1, 3, 'test1'), (2, 2, 'test2'), (3, 2, 'test3')], 
          dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<U5')])
这不是2d数组;它是1d(这里是3个元素)和3个字段

以类似于规范的方式格式化此数组的最简单方法可能是使用
csv
编写器:

In [570]: np.savetxt('x.txt',x,fmt='%d  %d  %s;')
In [571]: cat x.txt     # shell command to display the file
1  3  test1;
2  2  test2;
3  2  test3;

是的,我检查过了,我不想在最终的3D数组中使用括号。我也面临着c作为字符串的问题。我相信它还说-只有长度为1的数组可以转换为python标量-不知道这意味着什么。括号只是为了打印的目的;它是一个3x2矩阵,不是吗?它应该看起来像这样吗? [ 1, 2 ; 3,4 ; 5,6]。用半列表示两行之间的差异。我相信如果我有方括号,那一行将有自己的特性-可能我错了-但我的理解是
numpy
不使用
来划分或显示其尺寸。它的普通2d显示看起来很像列表。可以吗你告诉我unicode类型是什么意思?当我打印它们时,我将它们打印为字符串。这个答案使用Python3,其中unicode是默认的字符串类型。你对特定的字符串显示或特定的数据结构(和行为)感兴趣吗这是一个真正的区别。
是显示的一部分,而不是数据结构。只要我可以随时访问值,我就可以使用任何显示。谢谢,或者用分号表示。
In [567]: a+b+c
Out[567]: [1, 2, 3, 4, 5, 3, 2, 2, 2, 8, 'test1', 'test2', 'test3', 'test4', 'test5']
In [561]: x=np.rec.fromarrays(([1,2,3],[3,2,2],['test1','test2','test3']))
In [562]: x['f0']
Out[562]: array([1, 2, 3])
In [563]: x['f2']
Out[563]: 
array(['test1', 'test2', 'test3'], 
      dtype='<U5')

In [568]: x
Out[568]: 
rec.array([(1, 3, 'test1'), (2, 2, 'test2'), (3, 2, 'test3')], 
          dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<U5')])
In [569]: print(x)
[(1, 3, 'test1') 
 (2, 2, 'test2') 
 (3, 2, 'test3')]
In [570]: np.savetxt('x.txt',x,fmt='%d  %d  %s;')
In [571]: cat x.txt     # shell command to display the file
1  3  test1;
2  2  test2;
3  2  test3;