Как убрать глобальный флаг из переменной в рабочей области - PullRequest
0 голосов
/ 16 мая 2018

У меня есть некоторые данные (.mat), которые были установлены как глобальные, поскольку они были сохранены, и которые теперь сохраняются как глобальные ячейки.Когда я загружаю его в рабочее пространство, оно автоматически устанавливается на глобальное.

Есть ли способ удалить глобальный флаг из этой переменной, не удаляя саму переменную из рабочего пространства, только глобальный атрибут?

Когда я копирую этот массив, он также автоматически копирует свой глобальный атрибут, а в документации он говорит только о том, как установить глобальный, а не как его удалить.Я использую MATLAB R2015a.

global exportmat
exportmat = cell(889,12);
filename = 'test.mat';
save(filename)

clear -globals exportmat

load('test.mat')
whos

  Name              Size            Bytes  Class    Attributes

  exportmat       889x12            85344  cell     global   

1 Ответ

0 голосов
/ 16 мая 2018

Самый простой способ, который позволил мне получить ОЗУ, это просто переопределить его:

global A
A=3;
whos A
  Name      Size            Bytes  Class     Attributes

  A         1x1                 8  double    global    
B=A;
whos B
  Name      Size            Bytes  Class     Attributes

  B         1x1                 8  double               % Note: not global
clear -global
A=B;
clear B;
whos A
  Name      Size            Bytes  Class     Attributes

  A         1x1                 8  double         

Если вам нужна эта переменная чаще, просто используйте ее, чтобы удалить флаг global и сохранить ее снова.

Использование save и load на R2016b:

global exportmat
exportmat = cell(889,12);
filename = 'test.mat';
save(filename)

clear exportmat
load('test.mat')
% whos exportmat

exportmat2=exportmat;

whos

  Name              Size            Bytes  Class    Attributes

  exportmat       889x12            85344  cell     global    
  exportmat2      889x12            85344  cell               
  filename          1x8                16  char               

Если R2015a не работает для ячеек (я не могу проверить это, поскольку у меня нет этой версии), вы можете переназначить содержимое каждой ячейки, которое должно работать, если они содержат двойные значения:

B = cell(size(A));
for ii = 1:size(B,1)
    for jj = 1:size(B,2)
        tmp = A{ii,jj};
        B{ii,jj} = tmp;
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...