Как назначить векторы (по четвертому измерению) предварительно заданным индексам

Да, используя декодер staticmethod

class MyClass(object):
    @staticmethod
    def the_static_method(x):
        print x

MyClass.the_static_method(2) # outputs 2

Обратите внимание, что в некотором коде может использоваться старый метод определения статического метода, используя staticmethod как функцию, а не декоратор. Это следует использовать только в том случае, если вам необходимо поддерживать древние версии Python (2.2 и 2.3)

class MyClass(object):
    def the_static_method(x):
        print x
    the_static_method = staticmethod(the_static_method)

MyClass.the_static_method(2) # outputs 2

. Это полностью идентично первому примеру (используя @staticmethod), просто не используя приятный декоратор синтаксис

Наконец, используйте staticmethod() экономно! Очень мало ситуаций, когда в Python необходимы статические методы, и я видел их много раз, когда отдельная функция «верхнего уровня» была бы более ясной.


Ниже приводится дословно из документации: :

Статический метод не получает неявный первый аргумент. Чтобы объявить статический метод, используйте эту идиому:

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...

Форма @staticmethod является функцией decorator - см. Описание определений функций в Определения функций для деталей.

Он может быть вызван либо в классе (например, C.f()), либо в экземпляре (например, C().f()). Экземпляр игнорируется, за исключением его класса.

Статические методы в Python аналогичны тем, которые были найдены в Java или C ++. Более подробную концепцию см. В classmethod() .

Дополнительные сведения о статических методах см. В документации по иерархии стандартного типа в . Иерархия стандартного типа .

Новое в версии 2.2.

Изменено в версии 2.4: Добавлен синтаксис конструктора функций.

2
задан Poelie 16 January 2019 в 16:39
поделиться

1 ответ

Вот способ использования sub2ind . Я не рассчитывал это:

sz = [100 100 100 200];
M = zeros(sz(1)*sz(2)*sz(3), sz(4));
ind = sub2ind(sz([1 2 3]), coordinates(:,1), coordinates(:,2), coordinates(:,3));
M(ind(:),:) = timeseries;
M = reshape(M, sz);

Вы можете немного увеличить скорость, заменив sub2ind на ручной расчет:

sz = [100 100 100 200];
M = zeros(sz(1)*sz(2)*sz(3), sz(4));
ind = coordinates(:,1) + sz(1)*(coordinates(:,2)-1) + sz(1)*sz(2)*(coordinates(:,3)-1);
M(ind(:),:) = timeseries;
M = reshape(M, sz);
0
ответ дан Luis Mendo 16 January 2019 в 16:39
поделиться
Другие вопросы по тегам:

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