python - 在没有 numpy 的情况下创建一个像 numpy.array() 这样的数组
问题描述
我有一个图像处理任务,我们被禁止使用 NumPy,所以我们需要从头开始编码。我已经完成了逻辑图像转换,但现在我坚持创建一个没有 numpy 的数组。
所以这是我最后的输出代码:
Output :
new_log =
[[236,
232,
226,
.
.
.
198,
204]]
我需要把它转换成一个数组,这样我就可以像这样写图像(使用 Numpy)
new_log =
array([[236, 232, 226, ..., 208, 209, 212],
[202, 197, 187, ..., 198, 200, 203],
[192, 188, 180, ..., 205, 206, 207],
...,
[233, 226, 227, ..., 172, 189, 199],
[235, 233, 228, ..., 175, 182, 192],
[235, 232, 228, ..., 195, 198, 204]], dtype=uint8)
cv.imwrite('log_transformed.jpg', new_log)
# new_log must be shaped like the second output
解决方案
您可以创建一个简单的函数来获取您的列表并以类似于 NumPy 的方式重塑它np.reshape()
。但它不会很快,而且它对数据类型(NumPy dtype
)一无所知,所以......我的建议是挑战不喜欢 NumPy 的人。特别是如果您使用的是 OpenCV——它取决于 NumPy!
这是您可以在纯 Python 中执行的操作的示例:
def reshape(l, shape):
"""Reshape a list.
Example
-------
>>> l = [1,2,3,4,5,6,7,8,9]
>>> reshape(l, shape=(3, -1))
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
"""
nrows, ncols = shape
if ncols == -1:
ncols = len(l) // nrows
if nrows == -1:
nrows = len(l) // ncols
array = []
for r in range(nrows):
row = []
for c in range(ncols):
row.append(l[ncols*r + c])
array.append(row)
return array
推荐阅读
- r - Radarchart 图中更大的标题 - R
- java - 在java中检测服务器端的对象
- css - 带有 twitter bootstrap 的双图标?
- mysql - Mysql查询中的顺序和组行
- mysql - SQL Group By 仅在连续行上
- swift - 从 AWS Cognito 用户登录/注册中删除字段
- javascript - 为画布对象设置动画
- arrays - 在 Xamarin App 中从字节数组显示 PDF
- c# - C# - 防止 TopMost 表单覆盖主应用程序标题
- python - Python 3:win32 mouse_event 不适用于 GUI 的耗时任务