Matlab에서 셀 배열의 숫자 표현을 double 배열로 숫자 표현으로 변환하는 작업은 str2double
또는 str2num
과 cellfun
의 조합으로 수행 할 수 있습니다. A recent post은 str2mat
과 sscanf
의 조합을 사용하여 더 빠른 변환을 달성하도록 제안했습니다. 그러나,이 방법은 다음과 같은 특정 데이터 세트에 대해 실패 할 것 같다sscanf로 데이터를 부정확하게 읽음
x={'98.78743';'99.39717';'99.93578';'100.40125';'100.79166';'101.10525';'101.34037';'101.49553';'101.56939';'101.56072';'101.4685';'101.29184';'101.03002';'100.68249';'100.24887';'99.72897';'99.12274';'98.43036';'97.65215';'96.78864';'95.84054'};
y=sscanf(str2mat(x).','%f');
[str2double(x),y,str2double(x)-y]
ans =
98.7874 98.7874 0
99.3972 99.3972 0
99.9358 99.9358 0
100.4013 100.4013 -0.0000
100.7917 0.7917 100.0000
101.1052 0.1053 101.0000
101.3404 0.3404 101.0000
101.4955 0.4955 101.0000
101.5694 0.5694 101.0000
101.5607 0.5607 101.0000
101.4685 0.4685 101.0000
101.2918 101.2918 -0.0000
101.0300 0.0300 101.0000
100.6825 0.6825 100.0000
100.2489 0.2489 100.0000
99.7290 0.7290 99.0000
99.1227 99.1227 0
98.4304 98.4304 0
97.6522 97.6522 0
96.7886 96.7886 0
95.8405 95.8405 0
상기 코드 블록의 마지막 행은 원래 셀 어레이의 이중 나타내는 도면 상기 sscanf
γ 변환 형태 및 둘 사이의 차이. 충실한 변환을 위해서는 세 번째 열의 모든 항목이 정확하게 0 일 것입니다. 값의 대부분은 부적절한 최상위 자릿수의 제거로 변환됩니다. 이 잘못된 행동의 근거는 무엇이며 정확한 진술을하기 위해 진술을 약간 수정할 수 있습니까? 일반적으로 변환하려는 숫자는 길이가 다르며 (소수점 이전 및 이후) 길이가 같은 셀 배열의 모든 숫자에 의존하는 모든 방법이 실패하게됩니다. 마지막으로, MATLAB의 내 버전은 2013 년 이전이므로 위 게시물에서 제안 된 strjoin
접근 방식에 의존 할 수 없습니다.
않습니다 9는 단일 열 (8)에있는 최대 문자 수와 패딩, 간격 또는 줄 바꿈 중 하나의 문자로 구성됩니까? 단일 숫자 (+1)의 최대 길이가 선택되는 한이 전략은 일반적으로 다양한 길이의 숫자 세트 (십진수 이전 및 이후)에 대해 작동합니까? – user001
@ user001 몇 가지 설명을 추가했습니다. MATLAB의'sscanf' 문서에서 % numbers가 무엇인지 알 수 있습니다. –
둘째, 길이가 선험적으로 알려지지 않은 경우 (즉, '9'값을 간단한 표현식에서 변수로 결정할 수 있는지) 데이터 집합에서 가장 긴 길이를 결정하는 간단한 방법이 있습니까? 다시 한번 감사드립니다. – user001