我有一个二维的numpy数组:arr= np.array([[2,5,10],[6,2,9]])
。现在,我要将其转换为3d numpy数组,因为我将向z轴或第3维放置相同数量的1,在该位置替换元素。例如,代替2,我们将放置两个1,所有其他元素将为零。所以我放置了两个1和八个0,因为矩阵的大小为2 * 3 * 10。
有可能吗?如果是,我们如何实现这一目标?
答案 0 :(得分:0)
这可能是您要问的...
使用numpy.reshape。这将采用数组并像这样重塑它:
array = numpy.array([[1,4,1],[3,1,4]]) numpy.reshape(array,(array.shape [0],array.shape [1],1)。
array现在是numpy.array([[[[1,4,1],[3,1,4]]])
结尾处的1基本上是为数组增加一个维度。形状只是指X-Y-Z-尺寸物体的长度...
在https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html上查看numpy文档以进行重塑。
希望我能帮上忙!
答案 1 :(得分:0)
您可以尝试这样的事情:
arr3d= np.zeros((arr.shape[0] , arr.shape[1], max(map(max, arr))))
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
print(i,j,arr[i][j])
for k in range(arr[i][j]):
arr3d[i,j,k]=1
我知道3个循环:\
根据@hpaulj的建议进行编辑
答案 2 :(得分:0)
像这样使用广播:
>>> x = np.array([[2,5,10],[6,2,9]])
>>>
>>> (x[..., None] > np.arange(10)).view('i1')
array([[[1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]],
[[1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0]]], dtype=int8)