Как получают путь к файлу от станд.:: ifstream в C++

Вы можете просто использовать np.ix_ для такого вещания, например:

x_indexed = x[np.ix_(row_indices,col_indices)]

Пример прогона -

In [221]: x
Out[221]: 
array([[17, 39, 88, 14, 73, 58, 17, 78],
       [88, 92, 46, 67, 44, 81, 17, 67],
       [31, 70, 47, 90, 52, 15, 24, 22],
       [19, 59, 98, 19, 52, 95, 88, 65],
       [85, 76, 56, 72, 43, 79, 53, 37],
       [74, 46, 95, 27, 81, 97, 93, 69],
       [49, 46, 12, 83, 15, 63, 20, 79]])

In [222]: row_indices
Out[222]: [4, 2, 5, 4, 1]

In [223]: col_indices
Out[223]: [1, 2]

In [224]: np.ix_(row_indices,col_indices) # Broadcasting of indices
Out[224]: 
(array([[4],
        [2],
        [5],
        [4],
        [1]]), array([[1, 2]]))

In [225]: x[np.ix_(row_indices,col_indices)]
Out[225]: 
array([[76, 56],
       [70, 47],
       [46, 95],
       [76, 56],
       [92, 46]])

As , предложенный OP , это действует так же, как передача старой школы с версией 2D-массива row_indices, которая имеет свои элементы / индексы отправленные до axis=0 и, таким образом, создавая одномерную размерность в axis=1 и, таким образом, позволяя вещание с col_indices. Таким образом, у нас было бы альтернативное решение, подобное этому -

In [227]: x[np.array(row_indices)[:,None],col_indices]
Out[227]: 
array([[76, 56],
       [70, 47],
       [46, 95],
       [76, 56],
       [92, 46]])

24
задан ereOn 11 June 2010 в 13:59
поделиться

3 ответа

У классов fstream нет функций для доступа или обработки имени, используемого для открытия файла, а в стандартной библиотеке C ++ нет функций обработки имен файлов - вам придется писать код самостоятельно, либо использовать стороннюю библиотеку или функции, предоставляемые операционной системой.

3
ответ дан 29 November 2019 в 00:15
поделиться

Вы не можете, std::ifstream не хранит эту информацию.

Что вы можете сделать, однако, это:

  1. использовать текущий рабочий каталог процесса для составления абсолютного пути самостоятельно, или
  2. использовать библиотеку типа Boost.Filesystem для преобразования между относительными и абсолютными путями.

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path");
    std::string abs_path_str = abs_path.string();
    
19
ответ дан 29 November 2019 в 00:15
поделиться

Я не думаю, что это возможно для std::fstream. Я сделал это для FILE * в Windows (не портативным способом). См. от объекта файла к имени файла.

Вы не думали о расширении ifstream собственным классом, который запоминает имя файла?

.
2
ответ дан 29 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: