Предположим, что Вы могли сделать это; рассмотрите этот пример:
interface Iface {
public static void thisIsTheMethod();
}
class A implements Iface {
public static void thisIsTheMethod(){
system.out.print("I'm class A");
}
}
class B extends Class A {
public static void thisIsTheMethod(){
System.out.print("I'm class B");
}
}
SomeClass {
void doStuff(Iface face) {
IFace.thisIsTheMethod();
// now what would/could/should happen here.
}
}
Обратите внимание на itertools , особенно на itertools.product . Вы можете сжать три цикла в один с помощью
import itertools
for x, y, z in itertools.product(*map(xrange, (x_dim, y_dim, z_dim)):
...
. Вы также можете создать куб следующим образом:
cube = numpy.array(list(itertools.product((0,1), (0,1), (0,1))))
print cube
array([[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]])
и добавить смещения простым сложением
print cube + (10,100,1000)
array([[ 10, 100, 1000],
[ 10, 100, 1001],
[ 10, 101, 1000],
[ 10, 101, 1001],
[ 11, 100, 1000],
[ 11, 100, 1001],
[ 11, 101, 1000],
[ 11, 101, 1001]])
, которое будет преобразовано в cube + (x, y, z)
в вашем случае. Самая компактная версия вашего кода будет выглядеть так:
import itertools, numpy
cube = numpy.array(list(itertools.product((0,1), (0,1), (0,1))))
x_dim = y_dim = z_dim = 10
for offset in itertools.product(*map(xrange, (x_dim, y_dim, z_dim))):
work_with_cube(cube+offset)
Edit : itertools.product
создает продукт по различным аргументам, то есть itertools.product (a, b, c)
, поэтому мне нужно передать map (xrange, ...)
как * map (...)
import itertools
for x, y, z in itertools.product(xrange(x_size),
xrange(y_size),
xrange(z_size)):
work_with_cube(array[x, y, z])