如何通过创建假 z 轴将 64x64 图像转换为 64x64x64 体积?
how to convert 64x64 images to 64x64x64 volumes by creating a fake z axis?
我正在尝试通过复制 MxN 值来创建假的 z 轴。例如,
假设我们有一个 4x4 矩阵
0 0 0 0
0 1 2 0
0 3 4 0
0 0 0 0
转换数组4x4x4后,下一个切片应该完全一样。
0 0 0 0
0 1 2 0
0 3 4 0
0 0 0 0
如果我们把它设为 4x4x4,如果我们从右边看,我们应该看到这样的体积:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
旋转体积的下一个切片应该是:
0 0 0 0
2 2 2 2
4 4 4 4
0 0 0 0
你要实现的操作叫做广播。
您可以在 keras 文档或 numpy 文档中找到更多信息。
Here for example
使用 numpy 库(可以说它比 keras 或 tensorflow 更常见)。例如,您可以这样写。
import numpy as np
a = np.array([[0.0,1, 2, 3], [4, 5, 6, 7], [0.0, 10.0, 20.0, 30.0], [432, 342, 342, 12]])
b = np.zeros(a.shape[0])
c = a[:, :, np.newaxis] + b
print(c)
它提供了以下结果。
array([[[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 2., 2., 2., 2.],
[ 3., 3., 3., 3.]],
[[ 4., 4., 4., 4.],
[ 5., 5., 5., 5.],
[ 6., 6., 6., 6.],
[ 7., 7., 7., 7.]],
[[ 0., 0., 0., 0.],
[ 10., 10., 10., 10.],
[ 20., 20., 20., 20.],
[ 30., 30., 30., 30.]],
[[432., 432., 432., 432.],
[342., 342., 342., 342.],
[342., 342., 342., 342.],
[ 12., 12., 12., 12.]]])
作为全局注释,请记住,"volume" 这里是一个数学概念。在打印的方式中,第一、第二和第三维度是可交换的。
因此,这些结果在数学上也是正确的:
d = c.transpose()
print(d)
[[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]
[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]
[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]
[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]]
和
e = d.transpose()
print(e)
[[[ 0. 0. 0. 0.]
[ 1. 1. 1. 1.]
[ 2. 2. 2. 2.]
[ 3. 3. 3. 3.]]
[[ 4. 4. 4. 4.]
[ 5. 5. 5. 5.]
[ 6. 6. 6. 6.]
[ 7. 7. 7. 7.]]
[[ 0. 0. 0. 0.]
[ 10. 10. 10. 10.]
[ 20. 20. 20. 20.]
[ 30. 30. 30. 30.]]
[[432. 432. 432. 432.]
[342. 342. 342. 342.]
[342. 342. 342. 342.]
[ 12. 12. 12. 12.]]]
您可以选择哪一个对您更友好。
希望对你有帮助。
您可以使用 numpy 库:
import numpy as np
a = np.array([[0, 0, 0, 0],
[0, 1, 2, 0],
[0, 3, 4, 0],
[0, 0, 0, 0]])
a3d = np.dstack([a, a, a])
dstack() 类似于 hstack() 和 vstack()(我记住 h 代表水平,v 代表垂直,d 可能代表深度)。
如果你想使用纯python它可以像相乘列表一样简单。
a = [[0,0,0,0],[0,1,2,0],[0,3,4,0],[0,0,0,0]]
result = [a] * 4
现在结果是你的 3 维矩阵。
我正在尝试通过复制 MxN 值来创建假的 z 轴。例如,
假设我们有一个 4x4 矩阵
0 0 0 0
0 1 2 0
0 3 4 0
0 0 0 0
转换数组4x4x4后,下一个切片应该完全一样。
0 0 0 0
0 1 2 0
0 3 4 0
0 0 0 0
如果我们把它设为 4x4x4,如果我们从右边看,我们应该看到这样的体积:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
旋转体积的下一个切片应该是:
0 0 0 0
2 2 2 2
4 4 4 4
0 0 0 0
你要实现的操作叫做广播。 您可以在 keras 文档或 numpy 文档中找到更多信息。 Here for example
使用 numpy 库(可以说它比 keras 或 tensorflow 更常见)。例如,您可以这样写。
import numpy as np
a = np.array([[0.0,1, 2, 3], [4, 5, 6, 7], [0.0, 10.0, 20.0, 30.0], [432, 342, 342, 12]])
b = np.zeros(a.shape[0])
c = a[:, :, np.newaxis] + b
print(c)
它提供了以下结果。
array([[[ 0., 0., 0., 0.],
[ 1., 1., 1., 1.],
[ 2., 2., 2., 2.],
[ 3., 3., 3., 3.]],
[[ 4., 4., 4., 4.],
[ 5., 5., 5., 5.],
[ 6., 6., 6., 6.],
[ 7., 7., 7., 7.]],
[[ 0., 0., 0., 0.],
[ 10., 10., 10., 10.],
[ 20., 20., 20., 20.],
[ 30., 30., 30., 30.]],
[[432., 432., 432., 432.],
[342., 342., 342., 342.],
[342., 342., 342., 342.],
[ 12., 12., 12., 12.]]])
作为全局注释,请记住,"volume" 这里是一个数学概念。在打印的方式中,第一、第二和第三维度是可交换的。
因此,这些结果在数学上也是正确的:
d = c.transpose()
print(d)
[[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]
[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]
[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]
[[ 0. 4. 0. 432.]
[ 1. 5. 10. 342.]
[ 2. 6. 20. 342.]
[ 3. 7. 30. 12.]]]
和
e = d.transpose()
print(e)
[[[ 0. 0. 0. 0.]
[ 1. 1. 1. 1.]
[ 2. 2. 2. 2.]
[ 3. 3. 3. 3.]]
[[ 4. 4. 4. 4.]
[ 5. 5. 5. 5.]
[ 6. 6. 6. 6.]
[ 7. 7. 7. 7.]]
[[ 0. 0. 0. 0.]
[ 10. 10. 10. 10.]
[ 20. 20. 20. 20.]
[ 30. 30. 30. 30.]]
[[432. 432. 432. 432.]
[342. 342. 342. 342.]
[342. 342. 342. 342.]
[ 12. 12. 12. 12.]]]
您可以选择哪一个对您更友好。 希望对你有帮助。
您可以使用 numpy 库:
import numpy as np
a = np.array([[0, 0, 0, 0],
[0, 1, 2, 0],
[0, 3, 4, 0],
[0, 0, 0, 0]])
a3d = np.dstack([a, a, a])
dstack() 类似于 hstack() 和 vstack()(我记住 h 代表水平,v 代表垂直,d 可能代表深度)。
如果你想使用纯python它可以像相乘列表一样简单。
a = [[0,0,0,0],[0,1,2,0],[0,3,4,0],[0,0,0,0]]
result = [a] * 4
现在结果是你的 3 维矩阵。