看看这个是为什么输出结果不一样A=np.arange(4).reshape(2,2) B= np.mat(np.arange(4).reshape(2,2))#生成矩阵对象 print(A*A) print(B*B)
时间: 2024-09-27 22:16:37 浏览: 60
当你使用`np.arange(4).reshape(2,2)`创建一个二维数组,并分别用`A`和`B`变量表示时,两者实际上都是NumPy的`array`对象,它们存储了同样的数据和形状,即一个2x2的矩阵:
```python
A = np.arange(4).reshape(2,2)
B = np.mat(np.arange(4).reshape(2,2))
```
然后,当计算`A * A`和`B * B`时,因为`*`操作在NumPy数组中表示元素级别的乘法(对应于矩阵的逐元素相乘),所以两个结果应该是相同的。这是因为`A`和`B`实际上是底层数据相同的情况。
但是,`B = np.mat(np.arange(4).reshape(2,2))`这一步将`A`转换为了一个`matrix`对象,虽然表面上看起来一样,但在内部,`matrix`是NumPy的一个特殊子类,它提供了一些额外的特性,比如支持传统的矩阵乘法(`**`)而不是元素乘法(`*`)。因此,`B * B`将会执行的是矩阵乘法,而不仅仅是元素乘法。
所以,如果你看到`print(A * A)` 和 `print(B * B)` 的输出结果不同,那是因为一个是元素乘法(返回一个新的矩阵,每个元素是原矩阵对应位置元素的平方),另一个可能是矩阵乘法(如果B是一个`matrix`对象的话,会按照矩阵乘法规则执行)。如果`B`不是`matrix`,那么两者应该是一致的。
相关问题
用python完成以下操作(1)a=np.array([[1,2,3],[4,5,6]])(查看数组的维度,数组元素的个数)。 2)将a数组的行变列,返回最后一个元素,返回第2到第4个元素,返回逆序的数组 3)a=np.arange(9).reshape(3,3) b=np.arange(9).reshape(3,3) 将a、b数组水平合并,垂直合并,深度合并 4)将a数组水平拆分,垂直拆分,深度拆分 5)数组运算(与常的四则运算,与数组的四则运算,判断数组是否相等) a=np.arange(4,dtype=np.float32).reshape(2,2) b=np.arange(4,8,dtype=np.float32).reshape(2,2) 求a+2,a+b,a/b,a*b,判断数组a,b是否相等 6)对数组a求和、积、平均值、最大值、最小值、元素替换、方差、标准差
1)a数组的维度为(2,3),数组元素的个数为6。
2)将a数组的行变列可以使用a.T,返回最后一个元素可以使用a[-1],返回第2到第4个元素可以使用a[1:4],返回逆序的数组可以使用a[::-1]。
3)水平合并可以使用np.hstack((a,b)),垂直合并可以使用np.vstack((a,b)),深度合并可以使用np.dstack((a,b))。
4)水平拆分可以使用np.hsplit(a,3),垂直拆分可以使用np.vsplit(a,3),深度拆分可以使用np.dsplit(a,3)。
5)a 2可以使用np.power(a,2),a b可以使用np.add(a,b),a/b可以使用np.divide(a,b),a*b可以使用np.multiply(a,b),判断数组a,b是否相等可以使用np.array_equal(a,b)。
6)对数组a求和可以使用np.sum(a),积可以使用np.prod(a),平均值可以使用np.mean(a),最大值可以使用np.max(a),最小值可以使用np.min(a),元素替换可以使用a[a>2]=0,方差可以使用np.var(a),标准差可以使用np.std(a)。
1.Numpy中的ndarray的size属性返回的是___ 2.属性shape返回的是___ 3.Numpy中的random模块中的函数shuffle的功能是对一个序列进行___ 4.补全从数组np.arange(15)中提取5到10之间的所有数字的代码。 array=np.arange(15) index=np.where((array>=5) & (array<=10)) nums=___ 5.补充实现将数组a = np.arange(10).reshape(2,-1)和数组b = np.repeat(1, 10).reshape(2,-1)水平堆叠的代码。 a = np.arange(10).reshape(2,-1) b = np.repeat(1, 10).reshape(2,-1) array=___ 6.补充实现交换数组np.arange(9).reshape(3,3)中的第1列和第2列的代码。 array=np.arange(9).reshape(3,3) array=___ 7.补全查找数组np.array([1,2,3,2,3,4,3,4,5,6])中的唯一值的数量的代码。 array=np.array([1,2,3,2,3,4,3,4,5,6]) counts=___
1. Numpy中的ndarray的size属性返回的是数组中元素的个数。
2. 属性shape返回的是数组的维度,即每个维度上的元素个数。
3. Numpy中的random模块中的函数shuffle的功能是对一个序列进行随机重排。
4. 代码如下:
```python
import numpy as np
array = np.arange(15)
index = np.where((array >= 5) & (array <= 10))
nums = array[index]
print(nums)
```
输出结果为:
```
[ 5 6 7 8 9 10]
```
5. 代码如下:
```python
import numpy as np
a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
array = np.hstack((a, b))
print(array)
```
输出结果为:
```
[[0 1 2 3 4 1 1 1 1 1]
[5 6 7 8 9 1 1 1 1 1]]
```
6. 代码如下:
```python
import numpy as np
array = np.arange(9).reshape(3,3)
array[:, [0, 1]] = array[:, [1, 0]]
print(array)
```
输出结果为:
```
[[1 0 2]
[4 3 5]
[7 6 8]]
```
7. 代码如下:
```python
import numpy as np
array = np.array([1,2,3,2,3,4,3,4,5,6])
counts = len(np.unique(array))
print(counts)
```
输出结果为:
```
6
```
阅读全文