som*_*one 0 python numpy data-science
我正在尝试使用 np.empty() 创建一个查找表,但是当我打印数组时,我意识到数组中的 velues 不是零。当我搜索它时,我发现 np.zeros() 和 np.empty() 都将 0 分配给所有值,但在分配时做不同的事情。我的意思是为什么 np.empty() 不返回一个充满零的数组?分配差异的处理是什么?
这是我的代码:
import numpy as np
lookUpTable = np.empty((1,256), np.uint8)
print(lookUpTable[0,2])
print(lookUpTable)
gamma=0.4
for i in range(256):
lookUpTable[0,i] = np.clip(pow(i / 255.0, gamma) * 255.0, 0, 255)
print(lookUpTable)
Run Code Online (Sandbox Code Playgroud)
这是他们给的任务:
np.zeros()
[[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 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 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 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]]
Run Code Online (Sandbox Code Playgroud)
np.empty()
[[ 92 0 63 0 63 0 92 0 67 0 58 0 92 0 85 0 115 0
101 0 114 0 115 0 92 0 102 0 97 0 122 0 105 0 108 0
92 0 65 0 112 0 112 0 68 0 97 0 116 0 97 0 92 0
76 0 111 0 99 0 97 0 108 0 92 0 80 0 114 0 111 0
103 0 114 0 97 0 109 0 115 0 92 0 80 0 121 0 116 0
104 0 111 0 110 0 92 0 80 0 121 0 116 0 104 0 111 0
110 0 51 0 56 0 45 0 51 0 50 0 92 0 108 0 105 0
109 0 112 0 121 0 92 0 114 0 97 0 110 0 100 0 111 0
109 0 92 0 95 0 103 0 101 0 110 0 101 0 114 0 97 0
116 0 111 0 114 0 46 0 99 0 112 0 51 0 56 0 45 0
119 0 105 0 110 0 51 0 50 0 46 0 112 0 121 0 100 0
46 0 50 0 46 0 67 0 111 0 110 0 102 0 105 0 103 0
0 0 0 0]]
Run Code Online (Sandbox Code Playgroud)
np.zeros保证你得到一个用零填充的数组。 np.empty为您提供一个包含内存中所有内容的数组;没有承诺将数组清零。
仅当您计划用您自己的值完全填充数组时才使用后者。
我对 numpy 的内部实现一无所知,但我怀疑它np.empty在分配数组以保存结果时使用或等效。它将显式填充结果数组的每个元素,因此不需要浪费时间确保将数组清零。