【问题标题】:split 3D numpy to 3 diffrent arrays将 3D numpy 拆分为 3 个不同的数组
【发布时间】:2018-12-05 17:51:40
【问题描述】:

我有 numpy.array pf 形状 (64 , 64 , 64) 我想把它分成3个变量,所以

x.shape ==> (64) 

y.shape ==> (64) 

z.shape ==> (64) 

由于每个暗淡代表体素坐标 (x,y,z) ,我尝试使用 dsplit() 但没有运气。有什么建议吗?

【问题讨论】:

  • 形状为(64, 64, 64) 的数组有64**3 个条目。您的三个数组总共只有 3*64 个条目。你如何减少这种情况?
  • 哦,我的错,我想成为x,y,z = 64**3(for each),所以形状 (3, 262144)
  • 如果你的初始数组的形状为(64, 64, 64),那么它总共有 64³ = 262,144 个元素。你不能得到三个数组,xyz,每个数组都有 64³ 个元素,除非它们是原始数组的三个副本。也许你可以举一个小例子来说明你想得到什么输入和输出? (例如,对于输入大小 (3, 3, 3)(4, 4, 4)

标签: python multidimensional-array numpy-ndarray voxel numpy-slicing


【解决方案1】:

你要找的可能是transpose + ravel:

X = np.arange(27).reshape((3,3,3))
>>> X
 ([[[ 0,  1,  2],
    [ 3,  4,  5],
    [ 6,  7,  8]],

   [[ 9, 10, 11],
    [12, 13, 14],
    [15, 16, 17]],

   [[18, 19, 20],
    [21, 22, 23],
    [24, 25, 26]]])

你的x,y,z

>>> X.transpose((0,1,2)).ravel()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
   17, 18, 19, 20, 21, 22, 23, 24, 25, 26])

>>> X.transpose((1,2,0)).ravel()
array([ 0,  9, 18,  1, 10, 19,  2, 11, 20,  3, 12, 21,  4, 13, 22,  5, 14,
   23,  6, 15, 24,  7, 16, 25,  8, 17, 26])

>>> X.transpose((2,0,1)).ravel()
array([ 0,  3,  6,  9, 12, 15, 18, 21, 24,  1,  4,  7, 10, 13, 16, 19, 22,
   25,  2,  5,  8, 11, 14, 17, 20, 23, 26])

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多