python np库小知识点补充 mat npy 转换

matlab的.mat矩阵数据与python的.npy数据的转换#npy转mat

import numpy as np
import scipy.io as sio   #读.mat用的
from sklearn import preprocessing   #图像归一化用的库

#npy转mat
# file_15 = '/home/.../np15/'
# file_17 = '/home/..../np17/'
# imgs15 = os.listdir(file_15)
# imgs17 = os.listdir(file_17)
# for img15 in imgs15:
#     image = np.load(file_15 + img15)    #np.load()实现读取.nyp数据.
#     sio.savemat('/home/..../mat15/%s.mat' % img15[:-4], {"image15" : image})  #sio.savemat()保存成.mat
#直接sio.savemat('/home/..../mat15/%s.mat' % img15[:-4], image)会报错,得给个字典式的操作(不过我也不明白为啥)
#http://blog.csdn.net/Cheese_pop/article/details/77989865  我参考的这篇博客。


#mat转npy
# file_15 = '/home/..../smat15/'
# file_17 = '/home/..../smat17/'
# imgs15 = os.listdir(file_15)
# imgs17 = os.listdir(file_17)
#
# for img15 in imgs15:
#     image = sio.loadmat(file_15 + img15)   #sio.loadmat()读mat文件
#     np.save('/home/lenovo/2Tdisk/Wkyao/FirstSetp/all11.1/s15/%s.npy' % img15[:-4], image)   #np.save()保存成.npy


#另外补充一个python库中的图像归一化的函数((img-mean)/sdt) 像素减均值后再除以方差
# img_1 = preprocessing.scale(img)


这样就可以完成python和matlab之间的数据转换和传递了。

在MATLAB里读取.mat的时候,会出现一个矩阵数据,如:MxN 被作为整体元素,变成1x1 size 的问题,那么,这个时候需要用importdata()函数来读.mat 而不是简单的load(). 栗子:

im = importdata(fullfile(in_dir, ims(i).name));

顺便说一下fullfile( , ) 它的作用是把括号内的内容拼接起来,组成完整的字符串文件路径.

ims(i).name 的作用是, 返回ims序列中索引为i的元素的名字。  以上均是matlab语言。


再返回来说强大的np库:实现图像旋转、镜像。栗子:

# coding=utf-8
import os
import numpy as np
import tifffile as tiff


#实现图像旋转
def roate(in_folder, out_folder):
    img_names = os.listdir(in_folder)  # img_names为tiff图像
    for name in img_names:
        image = tiff.imread(in_folder + name)
        image_90 = np.rot90(image)      # 转90°    
        image_180 = np.rot90(image, 2)  # 转180°   
        image_270 = np.rot90(image, 3)  # 转270°
        #这么理解吧:np.rot90(image,x) 函数,x缺省时,默认为1,逆时针转90度,x=2代表转180度,3代表转270度。
        tiff.imsave(out_folder + name[:-5] + '_1.tiff', image_90)
        tiff.imsave(out_folder + name[:-5] + '_2.tiff', image_180)
        tiff.imsave(out_folder + name[:-5] + '_3.tiff', image_270)

    return

#实现图像镜像
def mirror(in_folder, out_folder):
    img_names = os.listdir(in_folder)  # img_names为tiff图像
    for name in img_names:
        image = tiff.imread(in_folder + name)
        rotate_1 = np.rot90(image.T)  # 上下翻转  先转置,再逆时针转90度。 
        rotate_2 = np.rot90(image.T, 3)  # 左右翻转  先转置,再逆时针转270度。
        rotate_3 = np.rot90((np.rot90(image.T)).T, 3)
        tiff.imsave(out_folder + name[:-5] + '_1.tiff', rotate_1)
        tiff.imsave(out_folder + name[:-5] + '_2.tiff', rotate_2)
        tiff.imsave(out_folder + name[:-5] + '_3.tiff', rotate_3)
        tiff.imsave(out_folder + name[:-5] + '_0.tiff', image)
    return

 要是转置旋转绕不清,就那最简单的[[1,2],[3,4]]这个小矩阵在草稿纸上写,顺时针逆时针什么的就搞明白了~!

另外还有一些np的小函数:

img = img.astype(np.float16)    对于图像转位深很好用。

.index()函数:

返回列表中某元素第一次出现的位置(索引值)

栗子:

a = [1, 2, 8, 4]

b = a.index(8)    :2  索引值为2.




未完待续......还回来补充,欢迎大家指正!





























  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 scipy 中的 loadmat 函数来读取 .mat 文件,然后使用 numpy 中的 save 函数将数据保存为 .npy 文件。 示例代码如下: ```python import scipy.io import numpy as np # 读取 .mat 文件 mat = scipy.io.loadmat('file.mat') # 获取数据 data = mat['data'] # 保存为 .npy 文件 np.save('file.npy', data) ``` 注意:在使用 loadmat 函数时,需要指定 .mat 文件的路径,并使用字典类型的结构获取其中的数据。 ### 回答2: 在Python中,将.mat文件转换为.npy文件可以使用SciPy中的io模块。 首先,我们需要安装SciPy,可以使用以下命令安装: ``` pip install scipy ``` 安装完成后,我们可以使用SciPy的io模块来进行.mat文件和.npy文件之间的转换。 假设我们已经有一个名为example.mat的.mat文件,我们想要将其转换为example.npy文件,可以使用下面的代码: ```python from scipy import io import numpy as np # 读取.mat文件 data = io.loadmat('example.mat') # 获取.mat文件中的数据 mat_data = data['variable_name'] # 将数据保存为.npy文件 np.save('example.npy', mat_data) ``` 在代码中,我们首先导入了SciPy的io模块和NumPy。然后,我们使用`io.loadmat()`函数读取.mat文件,将返回一个字典,其中包含了.mat文件中的所有变量。我们可以通过指定变量的名称来获取相应的数据。 接着,我们使用`np.save()`函数将获取的数据保存为.npy文件。需要注意的是,此函数的第一个参数是.npy文件的名称,第二个参数是要保存的数据。 运行上述代码后,就会在当前目录下生成一个名为example.npy的.npy文件,其中包含了来自example.mat文件的数据。 ### 回答3: 在Python中将.mat转换为.npy,可以使用SciPy中的io模块。首先需要导入SciPyNumPy: ``` import scipy.io import numpy as np ``` 然后使用SciPy的io模块中的`loadmat`函数加载.mat文件: ``` data = scipy.io.loadmat('input.mat') ``` 这将把.mat文件中的数据加载到一个字典中。你可以使用keys()方法查看字典的键: ``` print(data.keys()) ``` 接下来,如果你想将某个特定的数组保存为.npy文件,可以使用NumPy的`save`函数: ``` np.save('output.npy', data['array_name']) ``` 这将把名为"array_name"的数组保存为.npy文件,文件名为"output.npy"。 如果你想转换整个.mat文件中的所有数组,可以使用一个循环遍历所有键和值,并保存为.npy文件: ``` for key, value in data.items(): np.save(key + '.npy', value) ``` 这将循环遍历所有的键和值,并分别以键名为文件名保存为.npy文件。 需要注意的是,在将.mat转换为.npy时,可能会因为数据类型不兼容导致转换失败。在这种情况下,你可以将数据类型转换为兼容的类型后再保存: ``` np.save('output.npy', data['array_name'].astype(np.float64)) ``` 这里将"array_name"的数组类型转换为float64类型后再保存。 通过以上步骤,你可以将.mat文件转换为.npy文件,并在Python中使用numpy进行后续分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值