我的這個資料陣列一個:
>>>a
array([[1., 2., 3.],
[4., 5., 6.]], dtype=float32)
現在我想對資料做這樣的事情:
>>>for n in range (1,4):
>>> a = 2
>>> print(a)
[[3. 4. 5.]
[6. 7. 8.]]
[[ 5. 6. 7.]
[ 8. 9. 10.]]
[[ 7. 8. 9.]
[10. 11. 12.]]
這將給我的最終結果一:
>>> a
array([[ 7., 8., 9.],
[10., 11., 12.]], dtype=float32)
如果我希望在值 > 8 時為每個元素停止迭代,這可能會給我這樣的最終結果:
>>> a
array([[7., 8., 7.],
[8., 7., 8.]], dtype=float32)
怎么做?
謝謝你!
uj5u.com熱心網友回復:
一種方法是:
import numpy as np
a = np.array([[1., 2., 3.],
[4., 5., 6.]], dtype=np.float32)
for n in range(1, 4):
a = 2 * ((a 2) <= 8)
print(a)
輸出
[[7. 8. 7.]
[8. 7. 8.]]
這個想法是將 2 乘以一個布爾掩碼,如果 2 可以添加到aelse 0的元素,則該掩碼將為 1 。
作為替代方案,您可以通過執行以下操作完全跳過 for 回圈:
a = 8 - (a % 2)
print(a)
輸出
[[7. 8. 7.]
[8. 7. 8.]]
上述解決方案是基于 a 中的偶數最終為 8 而奇數為 7 的事實,這當然是假設所有數字a都小于 8。
uj5u.com熱心網友回復:
使用np.where
代碼
a = np.array([[1., 2., 3.],
[4., 5., 6.]], dtype=np.float32)
for i in range(1, 4):
a = np.where(a 2 <= 8, a 2, a)
替代方案(需要 Python 3.8 )
您可以使用 Walrus 運算子來避免計算 a 2 兩次:
for i in range(1, 4):
a = np.where((p:=a 2) <= 8, p, a)
輸出
print(a)
array([[7., 8., 7.],
[8., 7., 8.]], dtype=float32)
解釋
Syntax :numpy.where(condition[, x, y])
Parameters:
condition : When True, yield x, otherwise yield y.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322032.html
下一篇:重塑陣列以適應Keras模型
