我有一个由大量.mat
个文件组成的数据集。每个.mat
文件都具有相当大的尺寸,即加载它们非常耗时。不幸的是,其中一些已损坏且load('<name>')
在这些文件上返回错误。我已经实现了一个try-catch例程来确定哪些文件已损坏。但是,鉴于只有少数几个文件已损坏的情况,加载每个文件并检查它是否已损坏是时间。有没有办法在不使用.mat
的情况下检查load('<name>')
文件的运行状况?
我无法在任何地方找到这样的解决方案。
答案 0 :(得分:2)
matfile
函数用于访问MAT文件中的变量,而不将它们加载到内存中。通过将try-catch例程更改为使用<?php
require __DIR__ . "/vendor/autoload.php";
$settings = [
"version" => "latest",
"region" => "eu-west-1",
"credentials" => [
"key" => "AKIDEXAMPLE",
"secret" => "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY",
],
];
$client = new \Aws\Ec2\Ec2Client($settings);
$result = $client->describeInstances([
"Filters" => [
[
"Name" => "instance-state-name",
"Value" => "running",
]
],
]);
var_dump($result);
而不是class Aws\Result#82 (1) {
private $data =>
array(2) {
'Reservations' =>
array(0) {
}
'@metadata' =>
array(4) {
'statusCode' =>
int(200)
'effectiveUri' =>
string(35) "https://ec2.eu-west-1.amazonaws.com"
'headers' =>
array(5) {
...
}
'transferStats' =>
array(1) {
...
}
}
}
}
,可以减少将大文件加载到内存中的开销。
由于matfile
似乎只在阅读损坏的文件时发出警告,因此您必须检查是否已发出此警告。这可以在调用load
之前使用lastwarn
:clear matfile
完成,并检查警告是否在之后发出:
lastwarn
您必须先找出相关的警告ID,方法是在损坏的文件上运行上述代码,然后保存matfile
。
更强大的解决方案是在创建时计算文件的校验和或散列(例如MD5),并在读取文件之前比较该校验和。