Py学习  »  Python

在Python中删除一些元素并展平数组

user18796731 • 4 年前 • 1715 次点击  

我有一个数组, R .我想删除与中的索引对应的元素 Remove 然后用剩下的元素展平。所需输出已附加。

R=np.array([[1.05567452e+11, 1.51583103e+11, 5.66466172e+08],
       [6.94076420e+09, 1.96129124e+10, 1.11642674e+09],
       [1.88618492e+10, 1.73640817e+10, 4.84980874e+09]])

Remove = [(0, 1),(0,2)] 

R1 = R.flatten()
print([R1])

所需的输出是

array([1.05567452e+11, 6.94076420e+09, 1.96129124e+10, 1.11642674e+09,
       1.88618492e+10, 1.73640817e+10, 4.84980874e+09])
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132244
文章 [ 3 ]  |  最新文章 4 年前
Ze'ev Ben-Tsvi
Reply   •   1 楼
Ze'ev Ben-Tsvi    4 年前
R = np.array([[1.05567452e+11, 1.51583103e+11, 5.66466172e+08],
              [6.94076420e+09, 1.96129124e+10, 1.11642674e+09],
              [1.88618492e+10, 1.73640817e+10, 4.84980874e+09]])

R1 = np.delete(R, (1, 2))

print([R1])
Nin17
Reply   •   2 楼
Nin17    4 年前

你可以通过列表理解来做到这一点:

import numpy as np
R=np.array([[1.05567452e+11, 1.51583103e+11, 5.66466172e+08],
       [6.94076420e+09, 1.96129124e+10, 1.11642674e+09],
       [1.88618492e+10, 1.73640817e+10, 4.84980874e+09]])

Remove = [(0, 1),(0,2)] 
b = [[j for i, j in enumerate(m) if (k, i) not in Remove] for k, m in enumerate(R)]
R1 = np.array([i for j in b for i in j]) #Flatten the resulting list

print(R1)

输出

array([1.05567452e+11, 6.94076420e+09, 1.96129124e+10, 1.11642674e+09,
       1.88618492e+10, 1.73640817e+10, 4.84980874e+09])
enke
Reply   •   3 楼
enke    4 年前

一种选择是使用 numpy.ravel_multi_index 获取 Remove 在展平数组中,然后使用 numpy.delete :

out = np.delete(R, np.ravel_multi_index(tuple(zip(*Remove)), R.shape))

另一种可能是替换中的值 去除 ,然后变平 R 过滤掉这些元素:

R[tuple(zip(*Remove))] = R.max() + 1
arr = R.ravel()
out = arr[arr<R.max()]

输出:

array([1.05567452e+11, 6.94076420e+09, 1.96129124e+10, 1.11642674e+09,
       1.88618492e+10, 1.73640817e+10, 4.84980874e+09])