我有一个三维数组,其中每个轴的长度相同(~100),对应于三维空间中的一个位置。这个数组的每个元素都有一个值(float64)。我试图创建一个数组来标识这个新3D数组的每个元素由一个数组元组组成,类似于np.哪里这样我就可以遍历3D数组的每个元素,并对所有相邻元素执行一个操作。在
我知道np.哪里因为一个3D数组将输出一个3元组的数组,其中每个数组的长度是相同的,并且是满足给定条件的元素数。我尝试做一些类似的事情,但是在我的例子中,我知道这些数组的长度是6,因为3D数组的每个元素都有6个近邻。我想将3D neighbors数组的每个元素设置为3个长度为6的数组的元组。在
我想做的是:
>>> values = np.zeros((100,100,100))
>>> neighbors = np.zeros((100,100,100))
>>> for i in range(neighbors.shape[0]):
>>> for j in range(neighbors.shape[1]):
>>> for k in range(neighbors.shape[2]):
>>> neighbors[i,j,k] = (np.array([i-1,i+1,i,i,i,i]),np.array([j,j,j-1,j+1,j,j]),np.array([k,k,k,k,k-1,k+1]))
>>> neighbors[5,6,9]
(array([4,6,5,5,5,5]), array([6,6,5,7,6,6]), array([9,9,9,9,8,10]))
但我得到的是以下错误:
^{pr2}$有没有办法把数组的元素设置成数组的元组?在
要在NumPy数组的单元格中存储任意Python对象,请将dtype更改为
object
:在这里,您需要更改到
^{pr2}$默认情况下,
np.zeros
创建浮点数据类型的数组,这意味着数组的每个单元格都必须包含一个浮点值,因此出现错误消息:请注意,使用
object
dtype的数组会阻止NumPy使用快速的数值方法,该代码将比使用本机(例如浮点)数据类型数组的等效NumPy代码慢。在例如,最好创建一个由浮点数据类型和形状
(3,6,100,100,100)
组成的数组,其中第一个轴(长度为3)允许您在三个子数组中进行选择第二个轴(长度为6)允许您在子阵列中的6个值中进行选择:
那么
neighbors
是一个具有本机NumPy数据类型的数组:下面是与您的
neighbors[5,6,9]
相对应的三个子数组:下面是这些子数组中的第二个,对应于您的
neighbors[5,6,9][1]
:下面是第二个子数组中的第四个值,对应于您的
neighbors[5,6,9][1][3]
:相关问题 更多 >
编程相关推荐