t = np.asarray([[2,3,4],[1,2,3],[1,0,4],[4,5,6]])
# 删除大于等于 4 的元素:保留二维数组但是不需要保留矩阵结构
# 希望结果:[[4], [], [4], [4, 5, 6]]
t[t >= 4]
# 可以删除但是结果为一维
# array([4, 4, 4, 5, 6])
np.where(t >= 4, t, 0)
# 不需要的元素( 0 )大量占用内存
#array([[0, 0, 4],
# [0, 0, 0],
# [0, 0, 4],
# [4, 5, 6]])
1
epleone 2019-12-10 14:39:38 +08:00 1
如果 a = [[4], [], [4], [4, 5, 6]], 那么 a.shape ?
也许你需要稀疏矩阵,或者说说你这个需求是用来实现什么。 |
2
CrazyRundong 2019-12-10 15:56:29 +08:00
```python
from scipy.sparse import coo_matrix # ... t[t > 4] = 0 coo_t = coo_matrix(t) ``` 稀疏矩阵和稠密矩阵有不同的存储方式。如果不知道矩阵的 pattern,那就用 corrdicate based index 存储吧 |
3
CrazyRundong 2019-12-10 15:57:53 +08:00 1
|
4
necomancer 2019-12-11 15:48:53 +08:00
用稀疏矩阵。稀疏矩阵 0 不占内存。操作基本和 numpy array 一致。你想要的结果只能用列表生成式了
[_[_>=4] for _ in t] In [2]: [_[_>=4] for _ in t] Out[2]: [array([4]), array([], dtype=int64), array([4]), array([4, 5, 6])] In [3]: np.array([_[_>=4] for _ in t]) Out[3]: array([array([4]), array([], dtype=int64), array([4]), array([4, 5, 6])], dtype=object) 得到一个 object array |