python-numpy-np.ndarray()构造函数详解

本文介绍了numpy的ndarray构造函数和array函数的用法,通过实例展示了如何创建数组并解决在使用过程中遇到的报错问题。作者强调了ndarray构造函数创建的数组元素可能是随机值,而array函数则常用于将常规Python列表转换为数组。在尝试显示图像时,需要注意数据格式要求,例如指定dtype以避免报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

网上看到一篇证件照换底色的代码,尝试了以下,效果还可以,但是对np.ndarray()函数不怎么理解,于是我在网上查看好久,很多都是零零散散的,要么对格式不了解,要么对返回类型不了解,于是在我看了将近30个网页后我决定自己写一篇( •̀ ω •́ )✧

至于这么多参数是干嘛的,我也不像了解哈哈哈,不过使用array函数,从常规的python列表或者元组中创建数组,元素的类型由原序列中的元素类型确定。

1.读入数据

当我们利用cv2读入一张图片时,cv2.imread()返回类型为 <class ‘numpy.ndarray’> 当时我想我可以利用numpy.ndarray()构造函数画一张纯色图

import cv2
# 读取照片
img=cv2.imread('D:\\Patrick_Star.jpg')#派大星
print(img)
# 输出结果为<class 'numpy.ndarray'>

2.np.ndarray()构造函数

np.ndarray(shape, dtype=float, buffer=None, offset=0, strides=None, order=None)
参数详细说明
ndarray是一个类,其默认构造函数是ndarray()。
array是一个函数,便于创建一个ndarray对象。
np.ndarray()构造函数相对更low-level一些,使用默认构造函数创建的ndarray对象的数组元素是随机值,而numpy提供了一系列的创建ndarray对象的函数,array()就是其中的一种;通常使用这些上层一点的函数来构造ndarray对象会更方便一些。

img1 = np.ndarray([300,300,3])
print(type(img1))# 输出为<class 'numpy.ndarray'>
print(img1.shape)# 输出为(300, 300, 3)
cv2.imshow('img',img1)
cv2.waitKey(0)

画了一张300*300,通道数为3的纯黑图
在这里插入图片描述

3.np.array()函数

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

#将列表转换为数组
array = np.array([[1,2,3],[4,5,6]])

array = np.array([1, 2, 3.0])
# 输出 array([ 1., 2., 3.])

array = np.array([1, 2, 3], ndmin=2)
# 输出 array([[1, 2, 3]])

但是此时你会发现运行后报错了:error: (-215:Assertion failed) src_depth != CV_16F && src_depth != CV_32S in function ‘convertToShow’

#300300列的列表
list = []
for i in range(300):
    list.append([36, 27, 237])
img2 = []
for i in range(300):
    img2.append(list)
img2=np.array(img2)
print(type(img2))#输出为<class 'numpy.ndarray'>
print(img2.shape)#输出为(300, 300, 3)
cv2.imshow('img',img2)
cv2.waitKey(0)

5.报错原因

至于为什么我又查了一下:次像素的数据格式有要求,可以指定dtype=np.uint8或者dtype=np.float32,所以稍微改一下就可以生成一张红色图片了

m = np.array([[1,2,3], [2,3,4]])                   # 定义矩阵,int32
m = np.array([[1,2,3], [2,3,4]], dtype=np.float)   # 定义矩阵,float64

在这里插入图片描述

### 回答1: 这个问题可以回答。numpy.ndarraynp.array 是同一种数据类型,因此不需要进行转换。numpy.ndarraynumpy 库中的多维数组对象,而 np.array 是 numpy 库中的数组类。可以直接使用 np.array() 函数创建一个 numpy 数组。 ### 回答2: 将numpy.ndarray转化为np.array是多余的,因为numpy.ndarray就是numpy数组的一种表示形式。numpy.ndarray是一个多维数组对象,而np.array是numpy库中用于创建数组对象的函数。实际上,当我们使用numpy库进行数组操作时,创建的数组对象就是numpy.ndarray类型的。因此,无需进行任何转化,numpy.ndarray本身就是np.array的一种形式,可以直接使用。 ### 回答3: 将numpy.ndarray转化为np.array是一种效果相同但不同名称的操作。numpy.ndarrayNumPy库中的多维数组对象,而np.array是NumPy库中的数组类。 要将numpy.ndarray转化为np.array很简单,只需使用np.array()函数即可。这个函数可以接收numpy.ndarray作为参数,并返回一个新的数组对象。 示例代码如下: ``` import numpy as np # 创建一个numpy.ndarray对象 ndarray_obj = np.array([[1, 2, 3], [4, 5, 6]]) # 将numpy.ndarray转化为np.array array_obj = np.array(ndarray_obj) print("numpy.ndarray对象:") print(ndarray_obj) print("np.array对象:") print(array_obj) ``` 运行结果如下: ``` numpy.ndarray对象: [[1 2 3] [4 5 6]] np.array对象: [[1 2 3] [4 5 6]] ``` 可以看到,通过np.array()函数将numpy.ndarray转化为np.array之后,对象的值和形状都不发生变化。这个转化操作一般用于将其他类型的数组对象(如Python列表)转化为NumPy数组对象,以便于进行NumPy库提供的各种操作和计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值