Что действительно матрицирует ** 2 средних в python/numpy?

В маленьких и простых задачах я не использую повышение, я использую dirent.h, который также доступен для окон:

DIR *dir;
struct dirent *ent;
if ((dir = opendir ("c:\\src\\")) != NULL) {
  /* print all the files and directories within directory */
  while ((ent = readdir (dir)) != NULL) {
    printf ("%s\n", ent->d_name);
  }
  closedir (dir);
} else {
  /* could not open directory */
  perror ("");
  return EXIT_FAILURE;
}

Это - просто маленький заголовочный файл и делает большую часть простого материала, в котором Вы нуждаетесь, не используя большой основанный на шаблоне подход как повышение (никакое преступление, мне нравится повышение!).

автором слоя совместимости окон является Toni Ronkko. В Unix это - стандартный заголовок.

ОБНОВЛЕНИЕ 2017 :

В C++ 17 существует теперь официальный способ перечислить файлы Вашей файловой системы: std::filesystem. Существует превосходный ответ от Shreevardhan ниже с этим исходным кодом:

#include 
#include 
#include 
namespace fs = std::filesystem;

int main()
{
    std::string path = "/path/to/directory";
    for (const auto & entry : fs::directory_iterator(path))
        std::cout << entry.path() << std::endl;
}

13
задан 29 August 2009 в 01:40
поделиться

3 ответа

Это просто квадрат каждого элемента.

from numpy import *
a = arange(4).reshape((2,2))
print a**2

выводит

[[0 1]
 [4 9]]
14
ответ дан 1 December 2019 в 22:07
поделиться

Вы должны прочитать NumPy для пользователей Matlab . Там упоминается поэлементная операция мощности, и вы также можете видеть, что в numpy некоторые операторы по-разному применяются к массиву и матрице .

>>> from numpy import *
>>> a = arange(4).reshape((2,2))
>>> print a**2
[[0 1]
 [4 9]]
>>> print matrix(a)**2
[[ 2  3]
 [ 6 11]]
5
ответ дан 1 December 2019 в 22:07
поделиться

** - оператор возведения в степень в Python, поэтому x ** 2 означает «x в квадрате» в Python, включая numpy. Такие операции в numpy всегда применяются поэлементно, поэтому x ** 2 возводит в квадрат каждый элемент массива x (любое количество измерений), как, скажем, x * 2 удвоит каждый элемент, или x + 2 увеличит каждый элемент на два (в каждом случае собственно x не затрагивается - результатом является новый временный массив та же форма, что и x !).

Edit : как указывает @ kaizer.ze, в то время как то, что я написал, справедливо для объектов numpy.array , это не так применить к объектам numpy.matrix , где умножение означает матричное умножение, а не операцию элемент за элементом, как для array (и аналогично для возведения в степень) - действительно, это ключевое различие между двумя типами. Как сказано в учебнике Scipy , например:

Когда мы используем numpy.array или numpy.matrix есть разница. A * x будет в последнем случае матрицей продукт, а не поэлементный продукт как с массивом.

то есть, как сказано в numpy ссылке :

Матрица - это специализированный двумерный массив который сохраняет свою двумерную природу благодаря операции. В нем есть особые операторы, такие как * (матрица умножение) и ** (степень матрицы).

4
ответ дан 1 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

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