Cython 中的 Memoryviews 切片要求标量
Memoryviews slices in Cython ask for a scalar
我正在尝试创建一个 memoryview 以将多个向量存储为行,但是当我尝试更改任何向量的值时出现错误,就像它期待一个标量一样。
%%cython
import numpy as np
cimport numpy as np
DTYPE = np.float
ctypedef np.float_t DTYPE_t
cdef DTYPE_t[:, ::1] results = np.zeros(shape=(10, 10), dtype=DTYPE)
results[:, 0] = np.random.rand(10)
这给我带来了以下错误:
TypeError: only size-1 arrays can be converted to Python scalars
鉴于我想用该向量覆盖第一行,我不明白...知道我做错了什么吗?
您想要使用的操作可以在 numpy 数组(Python 功能)或 Cython 的内存视图(C 功能,即 Cython 在 C 代码中生成正确的 for 循环)之间使用,但不是你混合了一个内存视图(在左侧)和一个 numpy 数组(在右侧)。
所以你要么使用 Cython 的内存视图:
...
cdef DTYPE_t[::1] r = np.random.rand(10)
results[:, 0] = r
#check it worked:
print(results.base)
...
或numpy数组(我们知道.base
是一个numpy数组):
results.base[:, 0] = np.random.rand(10)
#check it worked:
print(results.base)
Cython 的版本开销较小,但对于大型矩阵不会有太大差异。
我正在尝试创建一个 memoryview 以将多个向量存储为行,但是当我尝试更改任何向量的值时出现错误,就像它期待一个标量一样。
%%cython
import numpy as np
cimport numpy as np
DTYPE = np.float
ctypedef np.float_t DTYPE_t
cdef DTYPE_t[:, ::1] results = np.zeros(shape=(10, 10), dtype=DTYPE)
results[:, 0] = np.random.rand(10)
这给我带来了以下错误:
TypeError: only size-1 arrays can be converted to Python scalars
鉴于我想用该向量覆盖第一行,我不明白...知道我做错了什么吗?
您想要使用的操作可以在 numpy 数组(Python 功能)或 Cython 的内存视图(C 功能,即 Cython 在 C 代码中生成正确的 for 循环)之间使用,但不是你混合了一个内存视图(在左侧)和一个 numpy 数组(在右侧)。
所以你要么使用 Cython 的内存视图:
...
cdef DTYPE_t[::1] r = np.random.rand(10)
results[:, 0] = r
#check it worked:
print(results.base)
...
或numpy数组(我们知道.base
是一个numpy数组):
results.base[:, 0] = np.random.rand(10)
#check it worked:
print(results.base)
Cython 的版本开销较小,但对于大型矩阵不会有太大差异。