Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中从3D numpy数组创建一个4列数组_Python_Numpy - Fatal编程技术网

在Python中从3D numpy数组创建一个4列数组

在Python中从3D numpy数组创建一个4列数组,python,numpy,Python,Numpy,我有一个维度的3D numpy数组(737737,90),其中包含float32类型的强度值(即体素强度)。我的问题是如何制作一个看起来像a=[x坐标,y坐标,z坐标,i(x,y,z)]的数组 其中I(x,y,z)值是已知的上述数组(737737,90) 我尝试了“for”循环方法,但没有得到像[x,y,z,I(x,y,z)]这样的数组。如果您在Python3.5中对此有任何解决方案,请务必让我知道 我尝试的方法是 arr=形状数组(737737,90)由值组成 对于阵列形状[0]中的x: fo

我有一个维度的3D numpy数组(737737,90),其中包含float32类型的强度值(即体素强度)。我的问题是如何制作一个看起来像a=[x坐标,y坐标,z坐标,i(x,y,z)]的数组

其中I(x,y,z)值是已知的上述数组(737737,90)

我尝试了“for”循环方法,但没有得到像[x,y,z,I(x,y,z)]这样的数组。如果您在Python3.5中对此有任何解决方案,请务必让我知道

我尝试的方法是

arr=形状数组(737737,90)由值组成

对于阵列形状[0]中的x:

for y in arr.shape[1]:

    for z in arr.shape[2]:

        A[] = [x,y,z, (arr[x,y,z])]
其中,arr[x,y,z]是维度(737737,90)的浮点值数组

所以我需要像[x,y,z,arr_值]这样的数组。在python3.5中有什么方法可以做到这一点吗

问候,


拉吉

你的方法不错。这些问题是:

  • 你忘了绕X
  • 要在一个值范围内循环,需要使用
    range
  • 在循环中使用前,需要初始化
    A

请注意,虽然这是一个良好的开端,但这是一个非常低效的解决方案,因为嵌套for循环在Python中通常速度较慢。可能更快但可读性较差的解决方案如下所示:

n_voxels = np.prod(arr.shape)
A = np.vstack([np.unravel_index(np.arange(n_voxels), arr.shape), arr.ravel()]).T

一种方法是获取所有这些索引,然后将其与输入数组叠加。输出将采用
(4,X,Y,Z)
格式。最后,要将其设置为
4
columns格式,请滚动轴以向后推第一个轴

因此,将需要实施-

I = np.indices(arr.shape)
out = np.rollaxis(np.vstack((I,arr[None])),0,4)

你好!有许多解决方案可以解决您的问题。你能澄清一下你所说的“循环法”是什么意思吗?最好在一个最小且自包含的示例中发布代码。那么我相信有人会告诉你哪里出了问题,以及如何纠正谢谢你的回复。我已经编辑了查询。谢谢你的回答。但有一件事我没有得到,当我检查输出时,假设我检查访问随机索引,如[200200,30],它应该给我一个值,对应于x,y,z索引,但它显示了4个值。为什么?如果您让我知道,这会很有帮助。@Rajubai您在问题中列出了您想要的
A
,例如
A:[x,y,z,arr\u值]
,我假设为4D数组。因此,当您使用
out[200200,30]
索引到它的前三个轴时,这与
out[200200,30,:]
相同,您将得到与4列对应的所有4个元素。为什么您希望[200,200,30]输出是一个值?如果您希望得到一个值,那么您可能希望通过
arr[200200,30]
从输入数组本身获取该值?
I = np.indices(arr.shape)
out = np.rollaxis(np.vstack((I,arr[None])),0,4)