Создайте трехмерный массив из подмассивов, созданных с помощью сетки, и введите 3-е измерение - PullRequest
0 голосов
/ 10 февраля 2019

Я новичок в Python, и я хотел бы построить полный 3D-массив с размерами = 1e3 x 1e3 x 16.

Для этого я попытался сделать:

dimBlocks = 4
numElBlock = 1000
numPoints = 1000

arrayCrossX = np.linspace(kMIN, kMAX, numPoints, endpoint=True)
arrayCrossY = np.linspace(-1, 1, numPoints, endpoint=True)

coordCrossX, coordCrossY = np.meshgrid(arrayCrossX, arrayCrossY)
arrayFullCross = np.array(coordCrossX.size, coordCrossY.sizes, dimBlocks**2)

Но это не работает, я получаю следующую ошибку:

arrayFullCross = np.array(arrayCrossX.size, arrayCrossY.size, dimBlocks**2) ValueError: only 2 non-keyword arguments accepted

Любой может увидеть, что не так, чтобы построить этот полный 3D-массив из подмассивов coordCrossX, coordCrossY и стретье измерение, равное dimBlocks**2 = 16

С уважением

1 Ответ

0 голосов
/ 10 февраля 2019
arrayFullCross = np.array(arrayCrossX.size, arrayCrossY.size, dimBlocks**2)
ValueError: only 2 non-keyword arguments accepted

Подпись для np.array:

array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

Правильный способ использования np.array:

In [658]: np.array([1,2,3], float)   # 2 nonkeyword arguments
Out[658]: array([1., 2., 3.])

То есть объект, который вы хотите сделатьмассив из, за ​​которым следует необязательный dtype.Все остальное имеет отношение к параметру типа copy.

Вы предоставляете 3 позиционных аргумента.Так как они всех размеров, вам нужно использовать что-то вроде np.zeros:

np.zeros( (arrayCrossX.size, arrayCrossY.size, dimBlocks**2) )
...