我正在尝试使用 numpy 来理解奇特的索引,但仍然面临一些问题。
我试图解决给定数组中的奇数 -ve 值需要了解如何将给定数组中的 +ve odd 替换为 -ve odd 的问题。 reshape 不起作用
import numpy as np
from numpy import reshape
v = np.arange(1, 91, 1)
print(v)
print("\n")
v1 = ((v[v%2==1])* (-1))
print (v1)
print("\n")
#val = np.arange(1, 91, 1).reshape(6,6)
#print(val)
#print("\n")
这是错误信息 ValueError:无法将大小为 90 的数组 reshape 为形状 (6,6)
最佳答案
选择所有奇数并将它们乘以 -1:
import numpy as np
v1 = np.arange(1, 91, 1)
v1[v1%2==1] *= -1 # select & multiply only odd indexes, don't effect even ones
print (v1)
输出:
[ -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18
-19 20 -21 22 -23 24 -25 26 -27 28 -29 30 -31 32 -33 34 -35 36
-37 38 -39 40 -41 42 -43 44 -45 46 -47 48 -49 50 -51 52 -53 54
-55 56 -57 58 -59 60 -61 62 -63 64 -65 66 -67 68 -69 70 -71 72
-73 74 -75 76 -77 78 -79 80 -81 82 -83 84 -85 86 -87 88 -89 90]
您给出的错误源于将 90 个元素 reshape 为 6*6 元素(即不可能)。您的 v1
是
[ -1 -3 -5 -7 -9 -11 -13 -15 -17 -19 -21 -23 -25 -27 -29
-31 -33 -35 -37 -39 -41 -43 -45 -47 -49 -51 -53 -55 -57 -59
-61 -63 -65 -67 -69 -71 -73 -75 -77 -79 -81 -83 -85 -87 -89]
因为您选择了奇数,所以乘以 -1 并分配它们 - 偶数不会被分配。这些值仍然是 45 个,而不是 36 个。
您无法将 90 个元素 reshape 为 6*6 (36) 个元素。你可以这样做:
print( np.arange(1, 91, 1).reshape(9,10) ) # reshape 90 elemens into 10*9 elems
[[ 1 2 3 4 5 6 7 8 9 10]
[11 12 13 14 15 16 17 18 19 20]
[21 22 23 24 25 26 27 28 29 30]
[31 32 33 34 35 36 37 38 39 40]
[41 42 43 44 45 46 47 48 49 50]
[51 52 53 54 55 56 57 58 59 60]
[61 62 63 64 65 66 67 68 69 70]
[71 72 73 74 75 76 77 78 79 80]
[81 82 83 84 85 86 87 88 89 90]]
关于python - 如何将数组的所有奇数值更改为其负数,例如通过花式索引 1 应该是 -1 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57836829/