我有一個 NumPy 陣列串列,我想在它上面隨機應用rot90和flip運行。所以最后,我有一個串列,其中一些陣列保持原樣,一些被修改(使用這兩個功能)。
我直接將該陣列串列傳遞給numpy.random.choice,它給了我以下錯誤ValueError: a must be 1-dimensional。
提前致謝。
uj5u.com熱心網友回復:
一種方法是創建一組函式并使用 隨機選擇random.choice應用于每個影像的函式:
import random
import numpy as np
# for reproducibility
random.seed(42)
np.random.seed(42)
# toy data representing the list of images
images = [np.random.randint(255, size=(128, 128)) for _ in range(10)]
functions = [lambda x: x, np.rot90, np.flip]
# pick function at random at apply to image
res = [random.choice(functions)(image) for image in images]
uj5u.com熱心網友回復:
您可以僅對索引進行采樣并應用于相關索引處的陣列。所以這里是一個基本思想的例子:
import numpy as np
# generate some random list of arrays
l = [np.random.randint(0,10,(4,4)) for _ in range(10)]
# sample indices and apply rotation and flip
indices = np.random.choice(np.arange(len(l)),int(len(l)/2),replace=False)
new_l = [np.flip(np.rot90(l[i])) if i in indices else l[i] for i in range(len(l))]
uj5u.com熱心網友回復:
為什么不采樣需要修改的索引串列?在下面的例子中,我設定了:
- 可以應用的功能串列
transformations - 如果函式只能應用于相同的一次 (
apply_only_once=True),或者允許多個應用程式 (apply_only_once=False) - 必須修改的行數是
n_lines_to_modify. 顯然,如果apply_ony_once=True,n_lines_to_modify必須小于或等于陣列中的行數;請注意,如果apply_only_once=False,n_lines_to_modify不受約束,因為可以將多個變換應用于同一行(極端情況:所有變換僅應用于一行!) arrays只是一個測驗輸入
在代碼中:
import random
import numpy as np
transformations = [lambda x: x**2, lambda x: x 2]
apply_only_once = True
n_lines_to_modify = 2
arrays = np.array([np.array([1,2,3]), np.array([1,2,3]), np.array([3,4,5])])
if apply_only_once:
to_be_modified = random.sample(range(len(arrays)), n_lines_to_modify)
else:
to_be_modified = [random.choice(range(len(arrays))) for _ in range(n_lines_to_modify)]
for i in to_be_modified:
arrays[i] = random.choice(transformations)(arrays[i])
print(arrays)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/334204.html
上一篇:Numpy排序作業奇怪
下一篇:向量的每對元素的Numpy減法
