簡體   English   中英

Python:在多個數組列中計數零並有效地存儲它們

[英]Python: Counting Zeros in multiple array columns and store them efficently

我創建一個數組:

import numpy as np
arr = [[0, 2, 3], [0, 1, 0], [0, 0, 1]]
arr = np.array(arr)

現在我計算每列的每個零並將其存儲在一個變量中:

a = np.count_nonzero(arr[:,0]==0)
b = np.count_nonzero(arr[:,1]==0)
c = np.count_nonzero(arr[:,2]==0)

此代碼工作正常。 但在我的情況下,我有更多的列,每個列都有超過 70000 個值。 這將是更多的代碼行和 spyder 中一個非常混亂的變量探索器。

我的問題:

  1. 是否有可能使此代碼更高效並僅將值保存在一種類型的數據中,例如字典、dataframe 或元組?
  2. 我可以使用循環來創建 dic、dataframe 或元組嗎?

謝謝

您可以構造一個 boolean 數組arr == 0 ,然后沿行取其總和。

>>> (arr == 0).sum(0)
array([3, 1, 1])

使用 collections 模塊中的有序字典:

from collections import OrderedDict
import numpy as np
from pprint import pprint as pp
import string

arr = np.array([[0, 2, 3], [0, 1, 0], [0, 0, 1]])
letters = string.ascii_letters
od = OrderedDict()

for i in range(len(arr)):
    od[letters[i]] = np.count_nonzero(arr[:, i]==0)

pp(od)

返回:

OrderedDict([('a', 3), ('b', 1), ('c', 1)])

示例用法:

print(f"First number of zeros: {od.get('a')}")

會給你:

First number of zeros: 3

要計算零,您可以沿每列計算非零並從每列的長度中減去結果:

arr.shape[0] - np.count_nonzero(arr, axis=0)

產生[3,1,1]

這個解決方案非常快,因為沒有創建額外的大對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM