我有一些python代码,它目前与二维数组硬连接在一起,如下所示:
import numpy as np
data = np.random.rand(5, 5)
width = 3
for y in range(0, data.shape[1] - W + 1):
for x in range(0, data.shape[0] - W + 1):
block = data[x:x+W, y:y+W]
# Do something with this block
现在,这对于二维数组是硬编码的,我想将其扩展到3D和4D数组。当然,我可以为其他维度编写更多
下面的例子对我来说很奇怪。数组a和c是不同的,但是在修改a的第一个元素时,c的第一个元素也会发生变化。为什么numpy数组是这样实现的?如果将a赋值为list,则更改a的第一个元素不会更改c的第一个元素。我想不出任何需要numpy数组行为的例子。
import numpy as np
a = np.arange(3,5)
#a = [3, 4]
b = a
c = a[:]
d = a.copy()
print(a is b) # True
print(a is c) # False
print(a is d) # False
print(a, b, c, d) #[3 4] [3 4]
我在使用numpy.random.shuffle函数时遇到了一些奇怪的事情
from numpy import arange
from numpy.random import shuffle
a = arange(5)
b = a
c = a[:]
shuffle(c)
a和b都使用c进行了更改。实际上,无论我shuffle()哪个变量,其他两个变量都会随之改变。我认为当我使用slice copy时,原始变量应该是独立的。我错过了什么吗?如何保护原始变量不被更改?
我有一个稀疏矩阵A和一个列向量a,
In[1]: A
Out[1]: <256x256 sparse matrix of type '<type 'numpy.float64'>'
with 512 stored elements (blocksize = 2x2) in Block Sparse Row format>
In[2]: len(a)
Out[2]: 70
我会写一个子矩阵。我为此编写的代码是:
Sub = A.tolil()[a,:][:,a]
解决这个问题所需的时间相当长。我很想知道是否可以修改代码以使进程更快。
我有过 int[,,,] arr = new int[5, 6, 7, 8]; // c#
arr = np.zeros((5, 6, 7, 8)) # Python 具有5 * 6 * 7 * 8单元的4d阵列。 我想把它切成c#,就像numpy那样 var mySlice = arr[2:4, 0, :2, :]; // Won't work in C#, but looking for a way to do this. return type should be int[,,] A 3d array with 2 * 1 * 2 * 8 cells.
my_slice = a
我正在尝试对从OpenCV (2.3.1) Python绑定生成的两个numpy数组进行通道比较。因此,我有一个形状为(x,y)的掩模(数组/图像/通道),我想将其与形状为(x,y,3)的RGB数组/图像的每个通道进行比较。
考虑到numpy的切片,我可以更接近我想要的东西:
channel = ndarr[...,i:i+1] #where i is the channel I want
..。但这会返回一个形状为(x,y,1)的ndarray,而不是我需要的(x,y)。有没有一种优雅的方法可以在单个切片操作中做到这一点。如果做不到,那么最简单的方法是什么呢?
我有一个带有imgs_all.shape == (511,112,112,2)的numpy数组imgs_all。我还有另一个numpy数组NotMissed,大小为511行,填充了1和0。当NotMissed为零时,我该如何跳过imgs_all中的行?我试着像下面这样做,但我想我全搞错了,因为我没有得到我想要的结果。 import numpy as np
N1 = SCALE - len(counter_missed) #number of rows that are not zero
imgs_all_new = np.zeros((N1,112,112,2), dtype = np.f