首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将.txt数据加载到10x256三维numpy数组中

将.txt数据加载到10x256三维numpy数组中
EN

Stack Overflow用户
提问于 2014-08-25 02:54:58
回答 2查看 748关注 0票数 1

我正在尝试将一些文本文件加载到numpy数组中。.txt文件表示图像的像素,其中每个像素的相对坐标为-10和+10 ( x),0和10为y,图像总计为10x256像素。问题是每个像素没有被赋予一个RGB值,而是给出一个与第一个/n分隔的“报头”中的波长值相对应的强度列表。每个坐标都被指定为第一个选项卡分隔的项,第一个条目只有" 0“,因为文本文件的格式如下:

代码语言:javascript
代码运行次数:0
运行
复制
Line 1: "0 0  625.15360  625.69449  626.23538 ..." (two coordinates followed by the wavelengths)
Line 2: "-10.00000  -10.00000   839   841   833   843   838   847 ..."
Line 3: "-10.00000   -9.92157   838   839   838 ..."

其中,839和838表示两个不同相邻像素的波长625.15360的强度,其中一个位于另一个像素之上(y的变化很小)。此外,841和839将是625.69449波长的强度,等等。

到目前为止,我的推理是使用np.genfromtxt()迭代文件,并向一个新数组中添加一个3D numpy数组,每个变量(x、y、lambda)都分配一个单一的强度值。另外,我认为如果x和y分别从0-9和0-255之间,而不是数据中给定的任意相对坐标,来表示图像,那就更有意义了。

问题:我不知道如何将数据加载到一个3x3 (卡在计算出2x2),我似乎不能正确地切片.

到目前为止我所拥有的是:

代码语言:javascript
代码运行次数:0
运行
复制
intensity_array2 = np.zeros([len(unique_y),len(unique_x)], dtype= int)

for element in np.nditer(intensity_array2, op_flags=['readwrite']):
    for i in range(len(unique_y)):
        for j in range(len(unique_x)):
            with open(os.path.join(path_name,right_file)) as rf:
                intensity_array2[i,j] = np.genfromtxt(rf, skip_header = (i*j)+j, delimiter = " ")

在上面的函数中可以找到len(unique_y) = 10len(unique_x) = 256

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-26 07:34:12

在Lukeclh回答的基础上,尝试:

代码语言:javascript
代码运行次数:0
运行
复制
data = np.genfromtxt(rf)

然后,剔除波长值。

代码语言:javascript
代码运行次数:0
运行
复制
wavelengths = data[0]
intensities = data[1:]

我们现在可以使用reshape重新排列数据:

代码语言:javascript
代码运行次数:0
运行
复制
intensitiesshaped = np.reshape(intensities, (len(unique_x),len(unique_y),-1))

"-1“值表示‘其余的放在这里’。

我们仍然有(在每个数组上)的领先值。为了修剪它们,我们可以:

代码语言:javascript
代码运行次数:0
运行
复制
wavelengths = wavelengths[2:]
intensitiesshaped = intensities[:,:,2:]

这只是将前两个索引中的信息抛出一边。如果你需要保留它,你将不得不做一些更复杂的事情。

票数 0
EN

Stack Overflow用户

发布于 2014-08-26 03:00:11

我不确定我完全理解你的文件格式,所以如果这没有意义,请原谅我。但是,如果有任何方法可以同时加载所有数据,我相信它会运行得更快。在我看来,您可以使用它将所有数据输入内存:

data = np.genfromtxt(rf,定界符=“")

然后创建3D数组:

intensity_array2 = np.zeros ( 10,256,num_wavlengths)

然后填写3D数组的值:

intensity_array2[ data:,0,data:,1,:] = data:,2:

这不完全是因为x和y索引可能为负值--在这种情况下,您可能需要添加一个偏移量。另外,如果输入文件的格式是可预测的,那么您可以简单地调用数据矩阵上的np.reshape()来获取所需的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25478428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档