ndarray | tuple[ndarray, float | None]
时间: 2023-03-27 09:01:56 浏览: 137
这是一个 Python 中的数据类型,ndarray 表示多维数组,而 tuple[ndarray, float | None] 表示一个元组,其中第一个元素是一个 ndarray 类型的数组,第二个元素是一个浮点数或者是 None。
相关问题
pythonndarray
### Python 中 `ndarray` 的基本概念
`ndarray` 是 NumPy 库中的核心数据结构之一,用于表示多维数组。这种数组具有固定大小和单一的数据类型,这使得其操作速度非常快[^1]。
```python
import numpy as np
# 创建一维数组
a = np.array([1, 2, 3])
print(a)
# 创建二维数组
b = np.array([[1, 2], [3, 4]])
print(b)
```
### 构建 `ndarray` 对象的方法
可以通过多种方式创建 `ndarray` 实例:
- 使用列表或其他序列类型的对象来初始化;
- 利用内置函数如 zeros() 或 ones() 来生成特定形状的全零/全一阵列;
- 调用 arange(), linspace() 函数按指定范围或间隔产生数值向量;
```python
c = np.zeros((3, 4)) # 形状为(3,4)的全0矩阵
d = np.ones((2, 3, 4), dtype=np.int16) # 整数类型三维全1张量
e = np.arange(10, 30, 5) # 类似range功能的一维数组
f = np.linspace(0, 2, 9) # 在区间[0,2]内均匀分布8个点形成的一维数组
g = np.random.rand(3, 2) # 随机浮点数构成的二维数组
h = np.eye(3) # 单位方阵
i = np.empty_like(c) # 和c有相同shape但是未初始化的内容
j = np.full((2, 2), 7) # 所有元素都是7的二维数组
k = np.fromfunction(lambda i,j: i+j, (3, 3))
l = np.loadtxt('data.txt') # 加载文件内容转换成ndarray
m = np.genfromtxt('file.csv', delimiter=',')
n = np.copy(k) # 复制现有数组
o = k.view(np.float32) # 改变视图而不改变底层数据
p = a.astype(float) # 数据类型转换
q = b.reshape(-1) # 更改维度布局
r = s.T # 矩阵转置
s = t.flatten() # 将高维展平为一维
t = u.ravel() # 展平时返回的是原数组的一个view而不是副本
u = v.squeeze() # 删除单维度条目
v = w.swapaxes(0, 1) # 交换轴的位置
w = x.resize((2, 3)) # 修改尺寸并填充新空间(如果存在)
x = y.repeat(2).reshape(y.shape[0]*2,y.shape[1]) # 沿某个方向重复扩展
y = z.compress(condition,axis=0)# 根据条件压缩掉某些行或列
z = aa.nonzero()[0][:5] # 获取前五个非零位置索引
aa = bb.argmax(axis=-1) # 返回最大值所在下标
bb = cc.min(initial=None) # 计算最小值
cc = dd.max(initial=None) # 寻找最大值
dd = ee.sum(axis=(0,), keepdims=True) # 总结统计信息
ee = ff.mean(dtype=float) # 平均值计算
ff = gg.std(ddof=0) # 方差估算
gg = hh.cumsum(axis=0) # 累加求和
hh = ii.prod(axis=0) # 各项相乘的结果
ii = jj.dot(jj.T) # 点积运算
jj = kk.clip(min=0,max=1) # 数组裁剪至给定边界之间
kk = ll.sort(kind='quicksort')# 排序算法应用
ll = mm.searchsorted(v=[1.,2.], side='left') # 插入排序后的index定位
mm = nn.partition(kth=[1,-1]) # 分区选取第K小/大元素
nn = oo.argsort() # 得到排序后各元素原本所在的indices
oo = pp.take(indices=[0,1,4], axis=0) # 提取指定索引处的子集
pp = qq.put(mask=[True,False,True], values=[10,20]) # 更新满足mask条件的地方
qq = rr.choose(choices=[rr*2, rr+2]) # 根据choice参数决定如何变换当前元素
rr = ss.diagonal(offset=0) # 取得对角线上的元素组成的新vector
ss = tt.trace(offset=0) # 主对角线上所有元素之和
tt = uu.var(ddof=0) # 计算样本方差
uu = vv.round(decimals=2) # 四舍五入保留指定位数的小数部分
vv = ww.conjugate() # 共轭复数处理
ww = xx.real # 抽取出实部成分
xx = yy.imag # 抽取出虚部成分
yy = zz.transpose(*axes_order) # 自定义排列顺序完成transpose动作
zz = aaa.split(indices_or_sections=2, axis=0) # 按照一定规则拆分原始matrix
aaa = bbb.vsplit(split_indices) # 垂直切割multi-dimension array
bbb = ccc.hsplit(split_indices) # 水平分割multi-dimension array
ccc = ddd.dsplit(split_indices) # 深度上切分multi-dimension array
ddd = eee.concatenate((eee, fff),axis=0) # 连接多个arrays成为更大的整体
fff = ggg.stack(arrays_list, axis=0) # 新增一个维度后再拼接起来
ggg = hhh.block(list_of_lists) # 给出嵌套list形式描述block matrix构建过程
hhh = iii.atleast_1d(iii) # 如果输入不是至少是一维则升维补足
iii = jjj.atleast_2d(jjj) # 至少两维化
jjj = kkk.atleast_3d(kkk) # 最低三维度展现形态
kkk = lll.broadcast_to(shape_tuple) # 广播机制下的扩张resize
lll = mmm.expand_dims(mmm, axis=0) # 添加新的长度为1的轴
mmm = nnn.squeeze(nnn) # 移除size等于1的那些轴
nnn = ooo.asfortranarray(ooo) # C-order to Fortran order memory layout change
ooo = ppp.asarray(ppp) # Convert input into an ndarray.
ppp = qqq.asanyarray(qqq) # Similar but preserves subclasses of ndarrays.
```
### 布尔型索引的应用实例
布尔型索引是一种强大的工具,它允许通过逻辑表达式筛选符合条件的元素[^2]。
```python
arr = np.array([[1, 2], [3, 4], [5, 6]])
bool_idx = arr > 2
filtered_arr = arr[bool_idx]
print(filtered_arr)
```
上述代码片段展示了如何利用布尔掩码选出大于2的所有元素,并将其存储在一个新的一维数组中。
### 查找匹配项及其索引
当需要找到两个或多于两个数组之间的共同元素时,可以借助 set operations 功能实现这一目标[^3]。
```python
set1 = np.array([1, 2, 3, 4, 5])
set2 = np.array([3, 4, 5, 6, 7])
common_elements = np.intersect1d(set1, set2)
unique_set1 = np.setdiff1d(set1, common_elements)
union_sets = np.union1d(set1, set2)
print(f"Common elements are {common_elements}")
print(f"Unique elements in first set are {unique_set1}")
print(f"The union is {union_sets}")
```
这段程序说明了怎样获取交集、差异以及联合等集合关系的操作方法。
我要自己实现cv2.warpPerspective函数,定义函数为def WARP(srcMat: Mat, homoMat: typing.Any, dstSize: typing.Tuple[int, int]):。如何实现?
您可以按照以下步骤来实现自己的cv2.warpPerspective函数:
1.通过np.meshgrid()函数创建一个二维坐标网格,其中每个网格点的坐标为(x,y)。
2.通过np.hstack()函数将网格坐标点(x,y)和一个全为1的列向量组合在一起,并用np.transpose()函数将其转置,得到一个(n,3)形状的坐标矩阵src。
3.通过homoMat.dot(src.T)计算得到一个(n,3)形状的目标坐标矩阵dst。
4.通过np.divide(dst[:,:2].T,dst[:,2])计算得到目标坐标矩阵的x,y坐标值,并用np.round()函数将其四舍五入为整数。
5.通过cv2.remap()函数将源图像srcMat根据目标坐标矩阵中的x,y坐标值映射到目标图像上。
6.返回目标图像。
实现的函数代码如下所示:
import numpy as np
import cv2
def WARP(srcMat: np.ndarray, homoMat: np.ndarray, dstSize: tuple) -> np.ndarray:
dst_w, dst_h = dstSize
dst = np.zeros((dst_h, dst_w, srcMat.shape[2]), np.uint8)
src = np.transpose(np.hstack((np.meshgrid(np.arange(srcMat.shape[1]),np.arange(srcMat.shape[0])), np.ones((srcMat.shape[0]*srcMat.shape[1],1)))),(1,0))
dst[:,:,[1,0]] = np.round(np.divide(np.transpose(homoMat.dot(src.T))[:2], np.transpose(homoMat.dot(src.T))[2])).reshape(dst_h, dst_w, 2)
dst_d = cv2.remap(srcMat, dst.astype('float32'), None, cv2.INTER_LINEAR)
return dst_d
请注意,这只是一种基本的实现方法,需要注意代码中的数据类型和数据格式,具体实现还需要结合您的具体需求进行调整。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)