如何将一维数组重塑为形状 (1,4,5) 的数组?

How to reshape a 1-d array into a an array of shape (1,4,5)?

我有这些载体:

a = [1,2,3,4]
b = [1,2,3,5]

我想把这个放在最后:

A = [ [1,0,0,0,0]
      [0,1,0,0,0]
      [0,0,1,0,0]
      [0,0,0,1,0] ]

B = [ [1,0,0,0,0]
      [0,1,0,0,0]
      [0,0,1,0,0]
      [0,0,0,0,1] ]

我一直这样使用 python 中的 np.reshape:

A = np.reshape(a,(1,4,1))
B = np.reshape(b,(1,4,1))

它只完成了部分工作,因为我得到了以下结果:

A = [[1]
     [2]
     [3]
     [4]]

B = [[1]
     [2]
     [3]
     [5]]  

理想情况下我想要这样的东西:

A = np.reshape(a,(1,4,(1,5)) 

但是在阅读文档时,这是不可能的。

在此先感谢您的帮助

您尝试做的实际上并不是重塑,因为您改变了数据的结构。 用你想要的形状创建一个新数组:

A = np.zeros(myshape)
B = np.zeros(myshape)

然后索引这些数组

n = 0
for i_a, i_b in zip(a, b):
    A[n, i_a - 1] = 1
    B[n, i_b - 1] = 1
    n += 1 

赋值中的 i_a/i_b - 1 只是为了使 1 索引成为第 0 个元素。这也仅在 ab 具有相同长度时有效。如果它们的长度不同,则制作这两个循环。 可能有更优雅的解决方案,但这应该可以完成工作:)

或者,numpy 可以一次性为 rows/columns 上的多个索引赋值,例如:

In [1]: import numpy as np

In [2]: b = [1,2,3,5]
   ...: 
   ...: 

In [3]: zero = np.zeros([4,5])

In [4]: brow, bcol = range(len(b)), np.array(b) -1  # logical transform

In [5]: zero[brow, bcol] = 1

In [6]: zero
Out[6]: 
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])