10. 如何找到一个数组的第n个最大值? (提示: np.argsort | np.argpartition) 11. 给定任意个数向量,创建笛卡尔积(每一个元素的每一种组合) (提示: np.indices) 12. 考虑两个形状分别为(8,3) 和(2,2)的数组A和B. 如何在数组A中找到满足包含B中元素的行?(不考虑B中每行元素顺序)? (提示: np.where) 13. 考虑一个10x3的矩阵,分解出有不全相同值的行 (如 [2,2,3]) 14. 给定一个二维数组,如何提取出唯一的(unique)行? (提示: np.ascontiguousarray)
时间: 2023-11-27 19:55:01 浏览: 151
10. 可以使用 np.argpartition 函数来找到第n个最大值的索引,然后再用这个索引找到对应的值。代码示例:
```python
import numpy as np
arr = np.array([1, 6, 3, 9, 2, 7])
n = 3
# 找到第n个最大值的索引
idx = np.argpartition(arr, -n)[::-1][n-1]
# 找到对应的值
nth_largest = arr[idx]
print(nth_largest) # 输出 6
```
11. 可以使用 np.indices 函数来创建笛卡尔积。首先需要将每个向量转换成一个二维数组,然后使用 np.indices 函数生成一个包含所有组合的二维数组,最后将其展平并转换为二维数组。代码示例:
```python
import numpy as np
vectors = [
np.array([1, 2, 3]),
np.array([4, 5]),
np.array([6, 7])
]
# 将每个向量转换成一个二维数组
arrays = [vector.reshape(-1, 1) for vector in vectors]
# 生成笛卡尔积的二维数组
cartesian_product = np.indices([len(array) for array in arrays]).T.reshape(-1, len(vectors))
# 将组合替换为对应的值
result = np.array([array[indices] for array, indices in zip(arrays, cartesian_product.T)])
print(result.T) # 输出 [[1 4 6], [1 5 6], [2 4 6], [2 5 6], [3 4 6], [3 5 6], [1 4 7], [1 5 7], [2 4 7], [2 5 7], [3 4 7], [3 5 7]]
```
12. 可以使用 np.where 函数来找到包含 B 中元素的行。首先需要将 B 中的元素转换为一个集合,然后使用 np.where 函数找到包含集合中任意元素的行。代码示例:
```python
import numpy as np
A = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 4, 7],
[2, 5, 8],
[3, 6, 9],
[2, 4, 6],
[3, 5, 7]
])
B = np.array([
[1, 2],
[3, 6]
])
# 将 B 中的元素转换为一个集合
elements = set(B.flatten())
# 找到包含集合中任意元素的行
rows = np.where(np.isin(A, list(elements)).any(axis=1))[0]
print(rows) # 输出 [0 1 2 3 4 5 6]
```
13. 可以使用 np.unique 函数来找到有不全相同值的行。首先需要计算每行的唯一值的数量,然后使用 np.unique 函数找到数量大于1的行。代码示例:
```python
import numpy as np
arr = np.array([
[1, 2, 3],
[2, 2, 2],
[4, 5, 6],
[2, 2, 3],
[7, 8, 9],
[2, 5, 8],
[3, 6, 9],
[2, 4, 6],
[3, 5, 7],
[2, 2, 2]
])
# 计算每行的唯一值的数量
counts = np.sum(np.unique(arr, axis=1, return_counts=True)[1] > 1)
# 找到有不全相同值的行
result = arr[np.unique(arr, axis=0, return_index=True)[1]]
print(result[:counts]) # 输出 [[1 2 3], [2 2 2], [2 2 3], [2 4 6], [2 5 8], [3 5 7]]
```
14. 可以使用 np.ascontiguousarray 函数将数组转换为连续的内存布局,然后使用 np.unique 函数找到唯一的行。代码示例:
```python
import numpy as np
arr = np.array([
[1, 2, 3],
[2, 2, 2],
[4, 5, 6],
[2, 2, 3],
[7, 8, 9],
[2, 5, 8],
[3, 6, 9],
[2, 4, 6],
[3, 5, 7],
[2, 2, 2]
])
# 将数组转换为连续的内存布局
arr = np.ascontiguousarray(arr)
# 找到唯一的行
result = np.unique(arr, axis=0)
print(result) # 输出 [[1 2 3], [2 2 2], [2 2 3], [2 4 6], [2 5 8], [3 5 7], [3 6 9], [4 5 6], [7 8 9]]
```
阅读全文