python
1# NUMPY_NONZERO-1 2 3import numpy as np 4 5# 配列を定義 6x = np.array([[5, 0, 1], 7 [3, 8, 0]]) 8 9# 非ゼロ要素のインデクス配列 10a = np.nonzero(x) 11 12print(a)
出力結果
(array([0, 0, 1, 1], dtype=int32),
array([0, 2, 0, 1], dtype=int32))
npzeroは、0でない要素の(座標?)インデックス配列を取得できるようなのですがこれもし、
配列が画像から取り出したRGB情報であった場合、
(1,0,1) (2,2,2) (3,3,3) (0,0,4) (5,0,4)
(1,1,0) (2,2,0) (3,3,3) (4,4,0) (5,0,4)
(1,9,1) (0,0,2) (0,0,0) (1,4,4) (5,4,4)
(1,0,0) (2,2,6) (3,3,3) (4,4,0) (0,0,0)
(0,0,0) (2,7,2) (0,0,0) (4,1,4) (5,4,4)
どの要素が、どのような形で取り出され、格納されるのでしょうか?
元の画像が大きすぎて、かつ全ピクセル情報が・・・により省略されて見れないので、
よく分からなくなりこんがらがっているのですが。
追記
以下の画像(sb.png)から抽出したRGBの配列(途中から省略)にnonzero関数を使うと、
元の配列(配列A)
[array([[[ 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, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
[ 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, 0, 0], [ 0, 0, 0], [ 0, 0, 0], [ 0, 0, 0], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [ 0, 0, 0],
・・・
[ 0, 0, 0]],
・・・
以下略
(配列の横の数字1,2,3・・・は目安につけた)
以下のようになったのですが。
onezero適用後の、1つ目の配列(配列B)
(array([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, 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, 0, 0, 0, 0,
・・・
以下略
2つ目の配列(配列C)
array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
・・・
以下略
3つ目の配列(配列D)
array([15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 12, 12,
12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18,
18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 10, 10, 10,
11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16,
16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22,
22, 22, 23, 23, 23, 24, 24, 24, 9, 9, 9, 10, 10, 10, 11, 11, 11,
12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17,
17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23,
23, 23, 24, 24, 24, 25, 25, 25, 8, 8, 8, 9, 9, 9, 10, 10, 10,
11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16,
16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22,
22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 7, 7, 7,
8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19,
19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24,
25, 25, 25, 26, 26, 26, 27, 27, 27, 6, 6, 6, 7, 7, 7, 8, 8,
・・・
以下略
4つ目の配列(配列E)
array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0,
1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1,
2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2,
0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0,
・・・
以下略
配列Dが自分が望むものっぽいので、取り出したいのですが、配列Dのみを取り出す場合、どのように書けば良いのでしょうか・・・?
python
1img = [np.array(Image.open('drive/My Drive/sb.png'))] 2 3def sigmoid(x): 4 return 1 / (1 + np.exp(-x)) 5 6for i in range(1): 7 img[i] = 255 - img[i] 8 img[i] = (img[i] > 128) * 255 9 10# 非ゼロ要素のインデックスを取得する 11print(np.nonzero(img))
とすると、以上の結果が出力されますが、
print(np.nonzero(img[2]))
等としても
---> 23 print(np.nonzero(img[2]))
IndexError: list index out of range
のエラーが出るため、配列の番号を変えるのではうまく行かないようです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/02/23 18:11 編集
2021/02/24 01:35
退会済みユーザー
2021/02/24 09:50
2021/02/24 10:48
退会済みユーザー
2021/02/24 11:13
退会済みユーザー
2021/02/24 12:43 編集