np.count_nonzero
时间: 2023-09-24 14:09:44 浏览: 50
`np.count_nonzero` 是一个 NumPy 库函数,用于计算数组中非零元素的个数。它的语法如下:
```python
np.count_nonzero(arr, axis=None)
```
其中,`arr` 表示要计算非零元素个数的数组;`axis` 表示要沿着哪个轴计算非零元素个数,如果不指定,则计算整个数组中的非零元素个数。
例如,对于以下的 NumPy 数组:
```python
import numpy as np
arr = np.array([[0, 1, 2], [3, 0, 5]])
```
可以使用 `np.count_nonzero` 计算非零元素的个数:
```python
print(np.count_nonzero(arr)) # 输出 4
```
也可以指定沿着哪个轴计算非零元素个数:
```python
print(np.count_nonzero(arr, axis=0)) # 输出 [1 1 2]
print(np.count_nonzero(arr, axis=1)) # 输出 [2 2]
```
相关问题
用c++ opencv mat实现python的np.count_nonzero
在C++ OpenCV中,可以使用函数`cv::countNonZero`来实现Python的`np.count_nonzero`的功能。该函数的原型如下:
```
int cv::countNonZero(const cv::Mat& src)
```
其中,`src`是输入的`cv::Mat`类型的矩阵,函数返回矩阵中非零元素的数量。例如,以下是一个示例代码:
```
cv::Mat src = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
int count = cv::countNonZero(src);
std::cout << "Non-zero elements: " << count << std::endl;
```
在上面的代码中,我们首先读取了一张灰度图像,然后使用`cv::countNonZero`函数计算了图像中非零元素的数量,并将结果输出到控制台。
import numpy as np import pandas as pd def read_asc(filepath): usecols = [0, 4] # 仅读取第0列和第4列 chunksize = 100000 # 每次读取100000行数据 for chunk in pd.read_csv(filepath, skiprows=4, encoding="gbk", engine='python', sep=' ', delimiter=None, index_col=False, header=None, skipinitialspace=True, usecols=usecols, chunksize=chunksize): file = np.array(chunk) data = read_message(file) filter_step_size(data) def read_message(file): mask = file[:, 1] == "107" data = file[mask] return data def filter_step_size(data): diff = np.diff(data[:, 0].astype(float)) # 将第0列转换为浮点数类型 mask = np.logical_and(0.090 < diff, diff < 0.110) success_sum = np.count_nonzero(mask) fail_sum = len(mask) - success_sum result = np.column_stack((data[:-1, 0], data[1:, 0], diff)) result = result[~mask] print("报文通过数: {}".format(success_sum)) print("报文未通过数: {}".format(fail_sum)) print("未通过前一项值:未通过后一项值:差值:") print(result) if __name__ == '__main__': read_asc("E:\\package\\107(2).asc") 增加条件,将读取第0列和第四列,并读取第四列值为107的数据。改为读取第0列,第三列和第四列,并读取第三列为Rx且第四列为107的数据
修改后的代码如下:
```python
import numpy as np
import pandas as pd
def read_asc(filepath):
usecols = [0, 3, 4] # 仅读取第0列、第3列和第4列
chunksize = 100000 # 每次读取100000行数据
for chunk in pd.read_csv(filepath, skiprows=4, encoding="gbk", engine='python', sep=' ', delimiter=None,
index_col=False, header=None, skipinitialspace=True, usecols=usecols, chunksize=chunksize):
file = np.array(chunk)
data = read_message(file)
filter_step_size(data)
def read_message(file):
mask = np.logical_and(file[:, 2] == "Rx", file[:, 3] == "107") # 第三列为Rx且第四列为107
data = file[mask]
return data
def filter_step_size(data):
diff = np.diff(data[:, 0].astype(float)) # 将第0列转换为浮点数类型
mask = np.logical_and(0.090 < diff, diff < 0.110)
success_sum = np.count_nonzero(mask)
fail_sum = len(mask) - success_sum
result = np.column_stack((data[:-1, 0], data[1:, 0], diff))
result = result[~mask]
print("报文通过数: {}".format(success_sum))
print("报文未通过数: {}".format(fail_sum))
print("未通过前一项值:未通过后一项值:差值:")
print(result)
if __name__ == '__main__':
read_asc("E:\\package\\107(2).asc")
```
这样修改后的代码会读取第0列、第3列和第4列,并且只读取第三列为"Rx"且第四列为"107"的数据。