Как преобразовать набор данных 3D в набор данных 2D в сетке? - PullRequest
0 голосов
/ 14 июля 2020

Моя проблема заключается в следующем:

У меня есть 3D-набор данных, где (x, y) - декартовы координаты сетки, а (z) - интенсивность / частота каждой точки сетки, названной (f).

Я хочу преобразовать этот набор данных 3D (x, y, f) в набор данных 2D (x, y), где я создам новые точки данных в сетке (x, y) в зависимости от интенсивности сигнала.

Например, у меня есть следующий график и набор данных:
Это некая форма «тепловой карты», где координата (z) - это интенсивность сигнала

Я хочу преобразовать этот набор трехмерных данных в двухмерный, в котором новые точки данных будут созданы в соответствии с интенсивностью предыдущей точки данных. Например, если интенсивность для (x = 1, y = 1) равна 20, я хочу создать 20 точек данных в (x = 1, y = 1) с интенсивностью 1.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Что-то вроде этого?

# make (small) example
f = np.random.randint(1,4,(2,3))
yxf = np.c_[(*map(np.ravel,(*np.indices(f.shape),f)),)]
yxf
# array([[0, 0, 1],
#        [0, 1, 3],
#        [0, 2, 3],
#        [1, 0, 2],
#        [1, 1, 2],
#        [1, 2, 2]])

# process 
yxf[:,:2].repeat(yxf[:,2],axis=0)
# array([[0, 0],
#        [0, 1],
#        [0, 1],
#        [0, 1],
#        [0, 2],
#        [0, 2],
#        [0, 2],
#        [1, 0],
#        [1, 0],
#        [1, 1],
#        [1, 1],
#        [1, 2],
#        [1, 2]])
0 голосов
/ 14 июля 2020

Если у вас установлен модуль scikit, вы можете использовать rgb2grey (или rgb2gray), чтобы сделать фотографию из цветного в серый (из 3D в 2D)

from skimage import io, color

lina_color = io.imread(path+img)
lina_gray = color.rgb2gray(lina_color)

In [33]: lina_color.shape
Out[33]: (1920, 1280, 3)

In [34]: lina_gray.shape
Out[34]: (1920, 1280)
...