假设您有一个numpy数组和一个列表:
>>> a = np.array([1,2,2,1]).reshape(2,2)
>>> a
array([[1, 2],
[2, 1]])
>>> b = [0, 10]
我想替换数组中的值,以便1替换为0,2替换为10。
我在这里发现了一个类似的问题-http://mail.python.org/pipermail//tutor/2011-September/085392.html
但是使用这个解决方案:
for x in np.nditer(a):
if x==1:
x[...]=x=0
elif x==2:
x[...]=x=10
给我一个错误:
ValueError: assignment destination is read-only
我想那是因为我不能真正写入numpy数组。
注意,numpy数组的实际大小是514x504,列表的实际大小是8。
不是逐个替换值,而是可以重新映射整个数组,如下所示:
收益率
Credit for the above idea goes to @JoshAdel。它比我原来的答案快得多:
我以这种方式对两个版本进行了基准测试:
我想你需要的是
numpy中的只读数组可写:
这将允许这样的分配操作:
真正的问题不是赋值本身,而是可写标志。
相关问题 更多 >
编程相关推荐