使用一个数组的形状和列表中的值创建 numpy 数组
Create numpy array with shape of one array and values from a list
我有一个 (128x128) 数组,由 cluster/super-pixel 每个像素所属的值组成,小 9x9 示例:
array([[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7]])
然后我有一个列表,其中包含超级像素(簇)的数量长度,例如:
[0, 1, 0, 0, 0, 1, 0, 1]
我现在想创建一个新的 (128,128) 数组,其中列表中的值替换相应超像素(簇)中的所有像素值,对于此示例:
array([[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1]])
澄清一下,如果列表中的第一项 == 1,我想创建一个新的 (128,128) 数组,其中 == 到列表索引的值将替换为我列表中该索引处的值.
使用原数组作为映射数组的索引:
>>> arr
array([[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7]])
>>> mapping = np.array([0, 1, 0, 0, 0, 1, 0, 1])
>>> mapping[arr]
array([[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1]])
我会为此使用 numpy.where
函数:
from numpy import *
arr1=array([0,0,1,1,1,2,2,2,2,
0,0,1,1,1,2,2,2,2,
0,0,1,1,1,2,2,2,2,
3,3,3,3,4,4,4,4,4,
3,3,3,3,4,4,4,4,4,
3,3,3,3,4,4,4,4,4,
5,5,5,6,6,6,7,7,7,
5,5,5,6,6,6,7,7,7,
5,5,5,6,6,6,7,7,7]).reshape((9,9,))
arr2=array([0, 1, 0, 0, 0, 1, 0, 1])
for i in range(len(arr2)):
arr1=where(arr1==i,arr2[i],arr1)
arr1 数组将包含输出。
我有一个 (128x128) 数组,由 cluster/super-pixel 每个像素所属的值组成,小 9x9 示例:
array([[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7]])
然后我有一个列表,其中包含超级像素(簇)的数量长度,例如:
[0, 1, 0, 0, 0, 1, 0, 1]
我现在想创建一个新的 (128,128) 数组,其中列表中的值替换相应超像素(簇)中的所有像素值,对于此示例:
array([[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1]])
澄清一下,如果列表中的第一项 == 1,我想创建一个新的 (128,128) 数组,其中 == 到列表索引的值将替换为我列表中该索引处的值.
使用原数组作为映射数组的索引:
>>> arr
array([[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[0, 0, 1, 1, 1, 2, 2, 2, 2],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 4, 4, 4, 4, 4],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7],
[5, 5, 5, 6, 6, 6, 7, 7, 7]])
>>> mapping = np.array([0, 1, 0, 0, 0, 1, 0, 1])
>>> mapping[arr]
array([[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1, 1]])
我会为此使用 numpy.where
函数:
from numpy import *
arr1=array([0,0,1,1,1,2,2,2,2,
0,0,1,1,1,2,2,2,2,
0,0,1,1,1,2,2,2,2,
3,3,3,3,4,4,4,4,4,
3,3,3,3,4,4,4,4,4,
3,3,3,3,4,4,4,4,4,
5,5,5,6,6,6,7,7,7,
5,5,5,6,6,6,7,7,7,
5,5,5,6,6,6,7,7,7]).reshape((9,9,))
arr2=array([0, 1, 0, 0, 0, 1, 0, 1])
for i in range(len(arr2)):
arr1=where(arr1==i,arr2[i],arr1)
arr1 数组将包含输出。