numpy配列の値を置き換えようとして、誰かが説明してくれることを望んでいた非常に奇妙な動作にぶつかるのにひどい時間を過ごしています。基本的に、遺伝的アルゴリズムで乗換え操作を行いたいと思います。これが簡単な例です。2 X 10の配列があり、行1から列5までのすべての値を、行2から列5までの値と交換する必要があります。コードは次のとおりです。
z=np.random.uniform(low=0,high=1,size=(2,10))
zcopy = z
print z
[[ 0.77488523 0.39966358 0.63233664 0.77093136 0.04102615 0.98984184
0.43402537 0.0910648 0.28037032 0.76654885]
[ 0.49980878 0.28161905 0.71972029 0.01208004 0.87851569 0.16853681
0.96325992 0.90886083 0.12344231 0.83665396]]
z[1,range(4)] = zcopy[0,range(4)]
print z
[[ 0.77488523 0.39966358 0.63233664 0.77093136 0.04102615 0.98984184
0.43402537 0.0910648 0.28037032 0.76654885]
[ 0.77488523 0.39966358 0.63233664 0.77093136 0.87851569 0.16853681
0.96325992 0.90886083 0.12344231 0.83665396]]
ご覧のとおり、行1のすべてが両方の行にコピーされています。しかし、別の配列のサブセットを指定せず、整数と言うだけで完全に機能する場合
z[1,range(4)] = range(4)
print z
[[ 0.77488523 0.39966358 0.63233664 0.77093136 0.04102615 0.98984184
0.43402537 0.0910648 0.28037032 0.76654885]
[ 0. 1. 2. 3. 0.87851569 0.16853681
0.96325992 0.90886083 0.12344231 0.83665396]]
私はかなり困惑しています。誰かがこれを回避する方法を知っていますか?