Я еще не понял ключевые понятия в numpy
.
Я хотел бы создать трехмерный массив и заполнить каждую ячейку результатом вызова функции - то есть функция будет вызываться много раз с разными индексами и возвращать разные значения.
Примечание. После написания этого вопроса документация была обновлена, чтобы сделать ее более понятной.
Я мог бы создать его с нулями (или пустым), а затем перезаписать каждое значение с помощью цикла for, но кажется, что заполнение его непосредственно из функции кажется более чистым.
fromfunction
звучит идеально. Читая документацию, звучит так, как будто функция вызывается один раз для каждой ячейки.
Но когда я действительно попробую это...
from numpy import *
def sum_of_indices(x, y, z):
# What type are X, Y and Z ? Expect int or duck-type equivalent.
# Getting 3 individual arrays
print "Value of X is:"
print x
print "Type of X is:", type(x)
return x + y + z
a = fromfunction(sum_of_indices, (2, 2, 2))
Я ожидаю получить что-то вроде:
Value of X is:
0
Type of X is: int
Value of X is:
1
Type of X is: int
повторяется 4 раза.
Я получил:
Value of X is:
[[[ 0. 0.]
[ 0. 0.]]
[[ 1. 1.]
[ 1. 1.]]]
[[[ 0. 0.]
[ 1. 1.]]
[[ 0. 0.]
[ 1. 1.]]]
[[[ 0. 1.]
[ 0. 1.]]
[[ 0. 1.]
[ 0. 1.]]]
Type of X is: <type 'numpy.ndarray'>
Функция вызывается только один раз и, похоже, возвращает весь массив как результат.
Как правильно заполнить массив на основе нескольких вызовов функции индексов?