Đôi khi nó rất hữu ích để "sao chép" một vectơ hàng hoặc cột vào một ma trận. Bằng cách nhân bản, tôi có nghĩa là chuyển đổi một vectơ hàng như
[1,2,3]
Vào một ma trận
[[1,2,3]
[1,2,3]
[1,2,3]
]
hoặc một vectơ cột như
[1
2
3
]
vào
[[1,1,1]
[2,2,2]
[3,3,3]
]
Trong matlab hoặc octave, điều này được thực hiện khá dễ dàng:
x = [1,2,3]
a = ones(3,1) * x
a =
1 2 3
1 2 3
1 2 3
b = (x') * ones(1,3)
b =
1 1 1
2 2 2
3 3 3
Tôi muốn lặp lại điều này trong numpy, nhưng không thành công
In [14]: x = array([1,2,3])
In [14]: ones((3,1)) * x
Out[14]:
array([[ 1., 2., 3.],
[ 1., 2., 3.],
[ 1., 2., 3.]])
# so far so good
In [16]: x.transpose() * ones((1,3))
Out[16]: array([[ 1., 2., 3.]])
# DAMN
# I end up with
In [17]: (ones((3,1)) * x).transpose()
Out[17]:
array([[ 1., 1., 1.],
[ 2., 2., 2.],
[ 3., 3., 3.]])
Tại sao phương thức đầu tiên ( In [16]
) hoạt động? Có cách nào để đạt được nhiệm vụ này ở trăn một cách tao nhã hơn không?
repmat
.
tile_df
liên kết ở đây
repmat
:repmat([1 2 3],3,1)
hoặcrepmat([1 2 3].',1,3)