首页 > 解决方案 > 从 meshgrid 生成的子数组构建 3D 数组并引入第 3 维

问题描述

我是 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 数组可能有什么问题coordCrossXcoordCrossY并且第三维等于dimBlocks**2 = 16

标签: pythonnumpynumpy-ndarray

解决方案


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.])

也就是说,您要从中创建数组的对象,后跟 optional dtype。其他任何东西都必须像copy.

您提供 3 个位置参数。由于它们都是尺寸,因此您需要使用以下内容np.zeros

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

推荐阅读