С Swift 1.1 вы можете напрямую передать параметр String
в const char *
.
import Foundation
let str = "123.4567"
let num = atof(str) // -> 123.4567
atof("123.4567fubar") // -> 123.4567
Если вам не нравятся устаревшие atof
:
strtod("765.4321", nil) // -> 765.4321
Одно предупреждение: поведение преобразования отличается от NSString.doubleValue
.
atof
и strtod
принять 0x
префикс шестнадцатеричной строки:
atof("0xffp-2") // -> 63.75
atof("12.3456e+2") // -> 1,234.56
atof("nan") // -> (not a number)
atof("inf") // -> (+infinity)
Если вы предпочитают поведение .doubleValue
, мы все еще можем использовать мост CFString
:
let str = "0xff"
atof(str) // -> 255.0
strtod(str, nil) // -> 255.0
CFStringGetDoubleValue(str) // -> 0.0
(str as NSString).doubleValue // -> 0.0
В документации Sklearn говорится, что количество компонентов, сохраняемых, если вы не укажете параметр n_components
, равно min(n_samples, n_features)
.
Теперь перейдем к вашему примеру:
В вашем первом примере число выборок данных 1797
меньше количества измерений 64
, поэтому оно сохраняет всю размерность (так как вы не указав количество компонентов). Тем не менее, во втором примере количество выборок данных намного меньше количества функций, поэтому PCA sklearns уменьшает количество измерений до n_samples
.