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;