создать трехмерный массив из двумерного массива - PullRequest
0 голосов
/ 02 марта 2019

У меня есть двумерный массив с номерами: arr= np.array([[2,5,10],[6,2,9]]).Теперь я хочу преобразовать это в трехмерный массив, так как я буду размещать то же число единиц в направлении оси z или третьего измерения, заменяя элемент в этом месте.Например, вместо 2 мы разместим две единицы, а все остальные элементы будут равны нулю.Поэтому я ставлю два 1 и восемь 0, так как матрица будет иметь размер 2 * 3 * 10.

Возможно ли это?Если да, как мы можем этого достичь?

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

вы можете попробовать что-то вроде этого:

arr3d= np.zeros((arr.shape[0] , arr.shape[1], max(map(max, arr))))
for i in range(arr.shape[0]):
    for j in range(arr.shape[1]):
        print(i,j,arr[i][j])
        for k in range(arr[i][j]):
            arr3d[i,j,k]=1

Я знаю 3 цикла: \

отредактировано после предложений от @ hpaulj

0 голосов
/ 02 марта 2019

Используйте вещание так:

>>> x = np.array([[2,5,10],[6,2,9]])
>>> 
>>> (x[..., None] > np.arange(10)).view('i1')
array([[[1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]],

       [[1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
        [1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 0]]], dtype=int8)
0 голосов
/ 02 марта 2019

Это может быть то, что вы спрашиваете ...

Используйте numpy.reshape.Это берет массив и изменяет его следующим образом:

array = numpy.array ([[1,4,1], [3, 1, 4]]) numpy.reshape (array, (array.shape)[0], array.shape [1], 1).

теперь массив numpy.array ([[[1,4,1], [3, 1, 4]]])

1 в конце добавляет в массив дополнительное измерение. Форма просто означает длину XYZ-любой размерной вещи ...

См. Документацию по изменению формы в https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html.

Надеюсь, я помог!

...