Tôi có hai mảng 20x100x3 NumPy mà tôi muốn kết hợp thành một mảng 40 x 100 x 3, nghĩa là, chỉ cần thêm nhiều dòng hơn vào mảng. Tôi đang bối rối bởi chức năng mà tôi muốn: là nó vstack, hstack, column_stack hoặc có thể cái gì khác?Kết hợp các mảng NumPy
Trả lời
Tôi tin rằng đó là vstack bạn muốn
p=array_2
q=array_2
p=numpy.vstack([p,q])
Một trong những cách tốt nhất để học tập đang thử nghiệm, nhưng tôi sẽ nói rằng bạn muốn np.vstack
mặc dù có những cách khác để làm điều tương tự:
a = np.ones((20,100,3))
b = np.vstack((a,a))
print b.shape # (40,100,3)
hoặc
b = np.concatenate((a,a),axis=0)
EDIT
Cũng giống như một ghi chú, trên máy tính của tôi cho các mảng có kích thước trong câu hỏi của OP, tôi thấy rằng np.concatenate
khoảng 2x nhanh hơn np.vstack
In [172]: a = np.random.normal(size=(20,100,3))
In [173]: c = np.random.normal(size=(20,100,3))
In [174]: %timeit b = np.concatenate((a,c),axis=0)
100000 loops, best of 3: 13.3 us per loop
In [175]: %timeit b = np.vstack((a,c))
10000 loops, best of 3: 26.1 us per loop
lạ, nhưng cảm ơn và bây giờ tôi có thể để lại bình luận đầu tiên. – Giltech
Tôi có thể, là ngu ngốc ở đây như tôi đã không được sử dụng timeit nhiều, nhưng không nối không mất 10x như nhiều vòng? – Giltech
@Giltech, trong khi timeit sử dụng vòng lặp nhiều hơn 10 lần để chuẩn 'np.concatenate' (có vẻ như chọn tự động), số quan trọng ở đây là thời gian trên mỗi vòng – JoshAdel
Có thể là đáng nói đến là
np.concatenate((a1, a2, ...), axis=0)
là hình thức chung và vstack và hstack là trường hợp cụ thể. Tôi tìm thấy nó dễ nhất để chỉ biết kích thước mà tôi muốn ngăn xếp hơn và cung cấp đó là đối số để np.concatenate.
Bằng cách này, đó cũng là r_
:
>>> from scipy import *
>>> a = rand(20,100,3)
>>> b = rand(20,100,3)
>>> a.shape
(20, 100, 3)
>>> b.shape
(20, 100, 3)
>>> r_[a,b].shape
(40, 100, 3)
>>> (r_[a,b] == vstack([a,b])).all()
True
tôi đã cố gắng một chút benchmark giữa r_ và vstack và kết quả là rất thú vị:
import numpy as np
NCOLS = 10
NROWS = 2
NMATRICES = 10000
def mergeR(matrices):
result = np.zeros([0, NCOLS])
for m in matrices:
result = np.r_[ result, m]
def mergeVstack(matrices):
result = np.vstack(matrices)
def main():
matrices = tuple(np.random.random([NROWS, NCOLS]) for i in xrange(NMATRICES))
mergeR(matrices)
mergeVstack(matrices)
return 0
if __name__ == '__main__':
main()
Sau đó, tôi chạy profiler:
python -m cProfile -s cumulative np_merge_benchmark.py
và kết quả:
ncalls tottime percall cumtime percall filename:lineno(function)
...
1 0.579 0.579 4.139 4.139 np_merge_benchmark.py:21(mergeR)
...
1 0.000 0.000 0.054 0.054 np_merge_benchmark.py:27(mergeVstack)
Vì vậy, cách vstack nhanh hơn 77 lần!
- 1. Kết hợp điều kiện mảng Numpy
- 2. Kết hợp NumPy với sympy
- 3. lặp qua tất cả các kết hợp cặp cột mảng NumPy
- 4. Powershell - kết hợp các mảng
- 5. Khoảng cách giữa các mảng numpy, cột
- 6. Nối một mảng NumPy vào một mảng NumPy
- 7. Các mảng kết hợp trong C
- 8. Các mảng kết hợp và Java
- 9. Kết hợp các mảng trong Scala
- 10. Kết hợp 3 mảng numpy riêng biệt vào một ảnh RGB trong Python
- 11. Làm thế nào để kết hợp hai phần tử mảng numpy khôn ngoan trong python?
- 12. Xác định mảng kết hợp của các mảng
- 13. Biểu đồ Numpy của các mảng lớn
- 14. Kết hợp hai mảng
- 15. tiết kiệm một mảng NumPy với dữ liệu hỗn hợp
- 16. Numpy - mảng vs asarray
- 17. NumPy: Kết nối đa chiều và unidimensional mảng
- 18. mảng numpy với cython
- 19. tạo mảng mảng kết hợp trong PHP
- 20. Flatten mảng numpy
- 21. NumPy mảng đa chiều slicing
- 22. Ma trận Numpy thành mảng
- 23. Mảng kết hợp từ chuỗi
- 24. 3d mảng NumPy để 2ngày
- 25. Kết hợp: tạo tất cả "trạng thái" - kết hợp mảng
- 26. Mảng mảng NumPy sử dụng None
- 27. str_replace() với mảng kết hợp
- 28. hàng xóa trong mảng NumPy
- 29. Numpy: Tạo một mảng phức tạp từ 2 mảng thực?
- 30. Python mảng NumPy thay thế
không chắc tại sao câu trả lời của bạn không hiển thị khi tôi truy cập trang lần đầu tiên. 1 để đề xuất vstack trước. – JoshAdel
Xin lưu ý rằng tài liệu gợi ý sử dụng 'stack' hoặc' concatenate' ngày nay và vstack chỉ được hỗ trợ cho khả năng tương thích ngược xem: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/ numpy.vstack.html – NOhs