gpt4 book ai didi

Python np.delete 问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:47 26 4
gpt4 key购买 nike

A = np.array([[1,2,3],[3,4,5],[5,6,7]])
X = np.array([[0, 1, 0]])
for i in xrange(np.shape(X)[0]):
for j in xrange(np.shape(X)[1]):
if X[i,j] == 0.0:
A = np.delete(A, (j), axis=0)

如果 X 中的索引 j 为 0,我将尝试从 A 中删除 j。我明白了

IndexError: index 2 is out of bounds for axis 0 with  size 2.

如果 X 是 [[0,1,0]] 那么 A 应该变成 [[3,4,5]]

最佳答案

不要在循环中调用 np.delete。使用 bool 索引会更快:

In [6]: A[X.astype(bool).any(axis=0)]
Out[6]: array([[3, 4, 5]])

X.astype(bool) 将 0 变为 False 并将任何非零值变为 True:

In [9]: X.astype(bool).any(axis=0)
Out[9]: array([False, True, False], dtype=bool)

调用 .any(axis=0) 如果X.astype( bool) 为 True,否则为 False


在遍历同一列表时从列表(或数组)中删除项目是 a classicpitfall .问题是由从列表中删除项目会改变序数的含义索引,这样如果你使用序号索引来删除其他项目,你可能会结束向上删除错误的项目,或者如果您尝试索引超出修改列表的有效范围。

在您的例子中,当您遍历 A 的行并删除 A 的行时:

for j in xrange(np.shape(X)[1]):
if X[i,j] == 0.0:
A = np.delete(A, j, axis=0)

每次修改 A 时,A 的索引都会发生变化。所以

        A = np.delete(A, 0, axis=0)

删除了原来的A的第一行,但是现在新的A只有两行。所以

        A = np.delete(A, 2, axis=0)

引发 IndexError,因为 2 指的是第三行,而新的 A 没有第三行。如果 i 循环导致 A = np.delete(A, j, axis=0) 也被多次调用,这个问题只会加剧。

关于Python np.delete 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30983268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com