2017-10-24 25 views
6
i=np.arange(1,4,dtype=np.int) 
a=np.arange(9).reshape(3,3) 

NumPy mảng Lỗi Loại: chỉ số nguyên mảng vô hướng có thể được chuyển đổi sang một chỉ số vô hướng

a 
>>>array([[0, 1, 2], 
      [3, 4, 5], 
      [6, 7, 8]]) 
a[:,0:1] 
>>>array([[0], 
      [3], 
      [6]]) 
a[:,0:2] 
>>>array([[0, 1], 
      [3, 4], 
      [6, 7]]) 
a[:,0:3] 
>>>array([[0, 1, 2], 
      [3, 4, 5], 
      [6, 7, 8]]) 

Bây giờ tôi muốn vectorize mảng để in tất cả chúng lại với nhau. Tôi cố gắng

a[:,0:i] 

hoặc

a[:,0:i[:,None]] 

Nó cung cấp cho Lỗi Loại: chỉ mảng số nguyên vô hướng có thể được chuyển đổi sang một chỉ số vô hướng

Trả lời

2

thử cách sau để thay đổi mảng của bạn để 1D

a.reshape((1, -1)) 
+0

https://stackoverflow.com/questions/48513824/compute-mfcc-for-varying-time-intervals-based-on-time-stamps Tôi có lỗi tương tự như thế nào để giải quyết nó. –

2

Câu trả lời ngắn:

[a[:,:j] for j in i] 

Những gì bạn đang cố gắng làm là không phải là một hoạt động vectorizable. Wikipedia defines vector hóa như một hoạt động hàng loạt trên một mảng duy nhất, thay vì trên vô hướng cá nhân:

In computer science, array programming languages (also known as vector or multidimensional languages) generalize operations on scalars to apply transparently to vectors, matrices, and higher-dimensional arrays.

...

... an operation that operates on entire arrays can be called a vectorized operation...

Xét về tối ưu hóa CPU cấp, các definition of vectorization là:

"Vectorization" (simplified) is the process of rewriting a loop so that instead of processing a single element of an array N times, it processes (say) 4 elements of the array simultaneously N/4 times.

Vấn đề với trường hợp của bạn là kết quả của từng hoạt động riêng lẻ có một hình dạng khác nhau : (3, 1), (3, 2)(3, 3). Chúng không thể hình thành đầu ra của một hoạt động được vector hóa đơn lẻ, bởi vì đầu ra phải là một mảng liền nhau. Tất nhiên, nó có thể chứa các mảng (3, 1), (3, 2)(3, 3) bên trong của nó (dưới dạng lượt xem), nhưng đó là những gì mảng ban đầu của bạn a đã làm.

Những gì bạn đang thực sự tìm kiếm chỉ là một biểu hiện duy nhất tính tất cả trong số họ:

[a[:,:j] for j in i] 

... nhưng nó không vector hóa trong một cảm giác của tối ưu hóa hiệu suất. Dưới mui xe đó là đồng bằng cũ for vòng lặp tính từng mục một.

+0

bạn có thể vui lòng giúp tôi ở đây: https://stackoverflow.com/questions/48513824/compute-mfcc-for-varying-time-intervals-based-on-time-stamps –

Các vấn đề liên quan