python创建结构
我试图对文件中的数据执行一些操作。我已经设法使用np.loadtxt加载了该文件python创建结构,python,arrays,numpy,Python,Arrays,Numpy,我试图对文件中的数据执行一些操作。我已经设法使用np.loadtxt加载了该文件 data = np.loadtxt('original_data.txt', dtype={'names': ('fileName', 'object_no', 'instance', 'tilt', 'pan_no', 'panValue'),'formats': ('S70', 'f5', 'f5', 'f5', 'f5', 'S5')}) 我发现我可以使用name\u new=data['fileName'
data = np.loadtxt('original_data.txt', dtype={'names': ('fileName', 'object_no', 'instance', 'tilt', 'pan_no', 'panValue'),'formats': ('S70', 'f5', 'f5', 'f5', 'f5', 'S5')})
我发现我可以使用name\u new=data['fileName']
访问单个列。(1-D阵列)
最好的方法是什么,以一种结构(相当于matlab)的格式,这样我就可以从单个数组中访问每个元素
原始数据:
[ ('RGBD_Crop_file/hand_towel_5_2_260_crop.png', 23.0, 5.0, 2.0, 260.0, 'NA')
('RGBD_Crop_file/lightbulb_1_4_76_crop.png', 28.0, 1.0, 4.0, 76.0, '132.3')
('RGBD_Crop_file/apple_2_2_97_crop.png', 0.0, 2.0, 2.0, 97.0, 'NA')
('RGBD_Crop_file/stapler_6_2_35_crop.png', 46.0, 6.0, 2.0, 35.0, 'NA')
('RGBD_Crop_file/toothpaste_2_2_119_crop.png', 49.0, 2.0, 2.0, 119.0, 'NA')
('RGBD_Crop_file/garlic_4_2_201_crop.png', 20.0, 4.0, 2.0, 201.0, '301.9')]
如果我理解正确,你想要的是这样的:
with open("filename") as f:
items = [line.split() for line in f]
如果要计算每个值,而不是所有字符串,可以使用:
items = [map(eval, line.split()) for line in f]
基于您的“原始数据”,我认为您的
数据
数组打印如下:
array([ ('RGBD_Crop_file/hand_towel_5_2_260_crop.png', 23.0, 5.0, 2.0, 260.0, 'NA'),
('RGBD_Crop_file/lightbulb_1_4_76_crop.png', 28.0, 1.0, 4.0, 76.0, '132.3'),
('RGBD_Crop_file/apple_2_2_97_crop.png', 0.0, 2.0, 2.0, 97.0, 'NA'),
('RGBD_Crop_file/stapler_6_2_35_crop.png', 46.0, 6.0, 2.0, 35.0, 'NA'),
('RGBD_Crop_file/toothpaste_2_2_119_crop.png', 49.0, 2.0, 2.0, 119.0, 'NA'),
('RGBD_Crop_file/garlic_4_2_201_crop.png', 20.0, 4.0, 2.0, 201.0, '301.9')],
dtype=[('fileName', 'S70'), ('object_no', '<f4'), ('instance', '<f4'), ('tilt', '<f4'), ('pan_no', '<f4'), ('panValue', 'S5')])
可以使用查看行或元素
data[3]
它也有复杂的数据类型,尽管它显示为一个简单的元组
您可以跨多个字段进行数学运算,例如:
data['tilt']*data['pan_no']
或跨一个字段的值:
np.mean(data['tilt'])
你还想做什么?这与在MATLAB
结构中访问数据有何不同?我认为命名元组对这类事情很有用:
import collections
DataRow = collections.namedtuple( "DataRow", ['column1','column2'] )
d = DataRow( "data in column1", "data in column2" )
在应用程序中,您将创建一个命名元组数组。我相信命名元组提供了您所要求的“struct”功能。您的确切意思是什么?Python字典、列表或对象可能是一个不错的选择。请详细说明从单个数组访问每个元素。另外,请发布几行数据-可能会将文件名
字段缩短一点。读取文件中的每一行,并将每一行转换为Python列表的条目。如何将行转换为条目将取决于您的数据。[(“RGBD_Crop_文件/hand_毛巾_5_2_260_Crop.png',23.0,5.0,2.0,260.0,'NA”)(“RGBD_Crop_文件/lightbulb_1_4_76_Crop.png',28.0,1.0,4.0,76.0,'132.3”)(“RGBD_Crop_文件/apple_2_2_97_Crop.png',0,2.0,2.0,2.0,2.0,'97,'NA')。。。,('RGBD_-Crop_文件/stapper_6_2_35_-Crop.png',46.0,6.0,2.0,35.0,'NA')('RGBD_-Crop_文件/牙膏_2_2_119_-Crop.png',49.0,2.0,2.0,2.0,119.0,'NA')('RGBD__-Crop文件/大蒜_4_2_201.png',20.0,4.0,4.0,4.0,4.0,201.0,'301.9')]谢谢..看起来我不需要将其作为numpy arrayPablo的项
不是一个数组,只是一个列表。你不能在列表上执行很多类似MATLAB的操作。
import collections
DataRow = collections.namedtuple( "DataRow", ['column1','column2'] )
d = DataRow( "data in column1", "data in column2" )