python中array函数是什么意思_python中numpy模块下函数array()和mat()的区别

1. mat()函数与array()函数生成矩阵所需的数据格式有区别

(1) mat()函数中数据可以为字符串以分号(;)分割,或者为列表形式以逗号(,)分割。而array()函数中数据只能为后者形式。

如mat()函数生成矩阵时一下两种方式都正确。

(2) 而array()函数生成矩阵时数据只能为列表形式。

2. mat()函数与array()函数生成的矩阵计算方式不同

(1) mat()函数中矩阵的乘积可以使用(星号)

*  或 .dot()函数,其结果相同。而矩阵对应位置元素相乘需调用numpy.multiply()函数。

(2) array()函数中矩阵的乘积只能使用 .dot()函数。而星号乘 (*)则表示矩阵对应位置元素相乘,与numpy.multiply()函数结果相同。

如生成以下矩阵:

a = numpy.mat([[1, 3], [5, 7]])

b = numpy.mat([[2, 4], [6, 8]])

c = numpy.array([[1, 3], [5, 7]])

d = numpy.array([[2, 4], [6, 8]])

则 a * b = a.dot(b) = c.dot(d) ,其表示矩阵相乘。

而 numpy.multiply(a, b) = c * d = numpy.multiply(c, d) ,其表示矩阵对应位置元素相乘。

———————

文章来源:https://blog.csdn.net/Build_Tiger/article/details/79848808

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 调用一个接受 `cv::Mat` 数据的 C++ 函数,可以使用 `Boost.Python` 库。 假设有如下的 C++ 代码: ```cpp #include <opencv2/opencv.hpp> void process_image(cv::Mat image) { // 对图像进行处理 // ... } ``` 则需要使用 `Boost.Python` 来将 `process_image` 函数导出到 Python 。示例代码如下: ```cpp #include <boost/python.hpp> #include <opencv2/opencv.hpp> #include <numpy/arrayobject.h> using namespace boost::python; void process_image(cv::Mat image) { // 对图像进行处理 // ... } // 将 cv::Mat 转换为 numpy.ndarray PyObject* mat_to_ndarray(const cv::Mat& mat) { npy_intp dims[2] = { mat.rows, mat.cols }; int dtype = NPY_UINT8; int channels = mat.channels(); if (channels == 1) { dtype = NPY_UINT8; } else if (channels == 3) { dtype = NPY_UINT8; } else if (channels == 4) { dtype = NPY_UINT8; } PyObject* pyobj = PyArray_SimpleNewFromData(2, dims, dtype, mat.data); PyObject* capsule = PyCapsule_New((void*)mat.data, NULL, NULL); PyArray_SetBaseObject((PyArrayObject*)pyobj, capsule); return pyobj; } // 将 numpy.ndarray 转换为 cv::Mat cv::Mat ndarray_to_mat(PyObject* ndarray) { PyArrayObject* np_array = (PyArrayObject*)ndarray; int ndims = PyArray_NDIM(np_array); npy_intp* dims = PyArray_DIMS(np_array); int dtype = PyArray_TYPE(np_array); int channels = (dtype == NPY_UINT8) ? 1 : 3; if (ndims == 3) { channels = dims[2]; } cv::Mat mat(dims[0], dims[1], CV_MAKETYPE(dtype, channels), PyArray_DATA(np_array)); return mat.clone(); } BOOST_PYTHON_MODULE(my_module) { import_array(); // 初始化 NumPy // 导出 process_image 函数 def("process_image", process_image); // 导出 mat_to_ndarray 函数 def("mat_to_ndarray", mat_to_ndarray); // 导出 ndarray_to_mat 函数 def("ndarray_to_mat", ndarray_to_mat); } ``` 在 Python ,可以按照以下方式调用 C++ 函数 `process_image`: ```python import numpy as np import cv2 import my_module # 读取图像 image = cv2.imread("image.jpg") # 将 cv::Mat 转换为 numpy.ndarray image_array = my_module.mat_to_ndarray(image) # 调用 C++ 函数处理图像 my_module.process_image(image_array) ``` 注意:在使用 NumPy 数组时,需要先初始化 NumPy,可以使用 `import_array()` 函数进行初始化。同时,为了避免内存释放问题,需要在 `mat_to_ndarray` 函数使用 `PyCapsule_New` 函数创建一个新的 Python 对象,并将其作为 `numpy.ndarray` 的基础对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值