2012-07-26 70 views
3

通過二進制矩陣,我的意思是矩陣中的每個元素都是0或1,並且我使用numpy中的Matrix類。在numpy中對二進制矩陣的有效操作

首先,它是否有一個特定類型的矩陣爲numpy,或者我們只是使用填充0和1的矩陣?

二,什麼是用於創建方陣充滿0給予其與Matrix類尺寸最快方式?注意:numpy.zeros((dim, dim))不是我想要的,因爲它創建了一個帶有浮點數的二維數組。0.

第三,我想頻繁地獲取和設置矩陣的任何給定行。爲獲得,我可以考慮使用row = my_matrix.A[row_index].tolist(),它將返回給定行的列表表示。對於設置,似乎我只能做my_matrix[row_index] = row_list,其中row_list是與給定行相同長度的列表。再次,我想知道他們是否是最有效的工作方法。

+0

爲什麼你需要'numpy.matrix'而不是'numpy.ndarray'?爲什麼在檢索它們時將行轉換爲列表? – 2012-07-26 21:14:20

+0

@SvenMarnach,我需要一個矩陣,因爲它具有矩陣特定計算的現成功能。我在檢索時將行轉換爲列表,因爲我需要將其序列化爲JSON。 – skyork 2012-07-26 22:35:34

+1

許多這些矩陣特定的操作也可以應用到數組 - 這就是我被問到的原因。如果你需要將事情串行化爲JSON,那麼你可能在其他地方遇到了瓶頸,而且你不需要關心從矩陣中檢索行的速度。 – 2012-07-26 23:00:55

回答

6

要使numpy的數組,其元素可以是0或1,使用dtype = 'bool'參數:

arr = np.zeros((dim,dim), dtype = 'bool') 

或者,要arr轉換爲numpy的矩陣:

arr = np.matrix(arr) 

要訪問行:

arr[row_num] 

並設置一行:

arr[row_num] = new_row 

是最快的方法。

+1

感謝您的建議。我寧願讓矩陣中的元素爲「0」或「1」,而不是「Ture」或「False」。另外,'arr [row_num]'將返回一維矩陣對象,而不是數組或列表。 – skyork 2012-07-26 22:37:48

+3

'True'和'False'基本上與'0'和'1'相同 - 只需在交互式解釋器中嘗試以下表達式:'0 == False','3 * True'。 – 2012-07-26 23:02:46

+1

@SvenMarnach它們是一樣的,但是'True'和'False'佔據8位,'0'和'1'(在Python中)佔據了8位。有條件是實際位的numpy數組會很好... – 2016-02-19 09:49:46