path = ("C:\Users\Administrator\Desktop\MGM\0330MGM_instructions_files\try3_0519_PDS_Geoscience\cartOrder\cartorder\REF_26_3.mat") load('wavelengths.mat'); load(path); size_ref_1 = size(Ph,1); size_ref_2 = size(Ph,2); Ph = permute(Ph, [3,2,1]); Ph = Ph(:,:,:); Ph = reshape(Ph, size(Ph,1), size(Ph,2)*size(Ph,3)); data = zeros(size(Ph,1), size(Ph,2)+1); wavelengths = reshape(wavelengths, [], 1); % 将 wavelengths 转换为 n 行 1 列的矩阵data(:, 1) = wavelengths; data(:, 1) = wavelengths; data(:, 2:end) = Ph save('output26_3_try4_0603.asc', 'data', '-ascii');代码是以上这个,怎么解决?已知原始的Ph为850*850*54
时间: 2023-09-06 13:13:09 浏览: 121
根据您提供的信息,您需要将 `Ph` 的大小调整为 `850*54*850`,并将 `wavelengths` 转换为 `850*1` 的矩阵,以便与 `Ph` 和 `data` 的大小匹配。您可以尝试以下代码:
```
path = "C:\Users\Administrator\Desktop\MGM\0330MGM_instructions_files\try3_0519_PDS_Geoscience\cartOrder\cartorder\REF_26_3.mat";
load('wavelengths.mat');
load(path);
Ph = permute(Ph, [1, 3, 2]); % 调整 Ph 的大小为 850*54*850
Ph = reshape(Ph, size(Ph,1), size(Ph,2)*size(Ph,3));
wavelengths = reshape(wavelengths, [], 1);
data = [wavelengths, Ph]; % 将 wavelengths 和 Ph 合并为一个矩阵
save('output26_3_try4_0603.asc', 'data', '-ascii');
```
这个代码将 `Ph` 的大小调整为 `850*54*850`,将 `wavelengths` 转换为 `850*1` 的矩阵,然后将 `wavelengths` 和 `Ph` 合并为一个矩阵 `data`。最后,将 `data` 保存为 ASC 文件。
相关问题
在运行path = ("E:\Arcgis_0807\A_yuebiaofanyan_0322\MGM\0330MGM_instructions_files\try3_0519_PDS_Geoscience\cartOrder\cartorder\REF_0_23.mat") function[Ph, size_ref_1, size_ref_2] = LoadM3Img(path) load(path); size_ref_1 = size(Ph,1); size_ref_2 = size(Ph,2); Ph = permute(Ph, [3,2,1]); Ph = Ph(17:44,:,:); Ph = reshape(Ph, size(Ph,1), size(Ph,2)*size(Ph,3));这一段代码时,提示中写道别忘了给第一列插入一列波长值,是什么意思?
在代码中,首先使用`load()`函数加载.mat文件,然后使用`permute()`函数对图像数据进行转置操作,并使用`reshape()`函数将图像数据变形为一个二维矩阵。这个二维矩阵的每一行对应一个像元,每一列对应一个波段的反射率。
提示中所说的给第一列插入一列波长值,指的是在这个二维矩阵的第一列插入一个波长值的列。这个波长值可以是每个波段对应的中心波长,或者是波段范围的平均值等等。
这个操作的目的是为了让后续处理中能够清楚地知道每一列对应的波段。这个波长值列可以放在矩阵的第一列或者最后一列,具体放在哪里可以根据需要自行决定。
示例代码如下:
```
import scipy.io
import numpy as np
def LoadM3Img(path):
data = scipy.io.loadmat(path)
Ph = data['Ph']
size_ref_1 = Ph.shape[1]
size_ref_2 = Ph.shape[2]
Ph = np.transpose(Ph, (2, 1, 0))
Ph = Ph[16:44, :, :]
Ph = np.reshape(Ph, (Ph.shape[0], Ph.shape[1] * Ph.shape[2]))
# 在第一列插入波长值列
wavelength = np.arange(0.23, 3.0, 0.01)
Ph = np.insert(Ph, 0, wavelength, axis=1)
return Ph, size_ref_1, size_ref_2
# 调用函数
path = "E:\Arcgis_0807\A_yuebiaofanyan_0322\MGM\0330MGM_instructions_files\try3_0519_PDS_Geoscience\cartOrder\cartorder\REF_0_23.mat"
Ph, size_ref_1, size_ref_2 = LoadM3Img(path)
```
在上述代码中,我们使用`np.insert()`函数在矩阵的第一列插入一个波长值列,这里的波长值是在0.23到3.0之间以0.01为步长生成的一个等差数列。
将以下代码生成的文件里的空值去除(即跳过运算),path = ("E:\Arcgis_0807\A_yuebiaofanyan_0322\MGM\0330MGM_instructions_files\try3_0519_PDS_Geoscience\cartOrder\cartorder\REF_0_23.mat") load('wavelengths.mat'); load(path); size_ref_1 = size(Ph,1); size_ref_2 = size(Ph,2); Ph = permute(Ph, [3,2,1]); Ph = Ph(17:44,:,:);%閫夊彇浜嗘尝娈�17-44鐨勫�间负涓�鍒� Ph = reshape(Ph, size(Ph,1), []); data = zeros(size(Ph,1), size(Ph,2)+1); data(:, 1) = wavelengths; data(:, 2:end) = Ph save('output0_23_try5.asc', 'data', '-ascii');
好的,以下是去除空值后的代码:
```
path = ("E:\Arcgis_0807\A_yuebiaofanyan_0322\MGM\0330MGM_instructions_files\try3_0519_PDS_Geoscience\cartOrder\cartorder\REF_0_23.mat")
load('wavelengths.mat');
load(path);
size_ref_1 = size(Ph,1);
size_ref_2 = size(Ph,2);
Ph = permute(Ph, [3,2,1]);
Ph = Ph(17:44,:,:);
Ph = reshape(Ph, size(Ph,1), []);
data = zeros(size(Ph,1), size(Ph,2)+1);
data(:, 1) = wavelengths;
data(:, 2:end) = Ph;
save('output0_23_try5.asc', 'data', '-ascii');
```
阅读全文